Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Spark SQL kan använda en kostnadsbaserad optimering (CBO) för att förbättra frågeplaner. Detta är särskilt användbart för frågor med flera kopplingar. För att detta ska fungera är det viktigt att samla in tabell- och kolumnstatistik och hålla dem uppdaterade.
Samla in statistik
För att få full nytta av CBO är det viktigt att samla in både kolumnstatistik och tabellstatistik. Du kan använda ANALYZE TABLE kommandot för att manuellt samla in statistik.
Tips
För att hålla statistiken up-touppdaterad, kör ANALYZE TABLE efter att du har skrivit till tabellen.
Använd ANALYZE
Förutsägande optimering kör automatiskt ANALYZE, ett kommando för att samla in statistik, på Unity Catalogs hanterade tabeller. Databricks rekommenderar att du aktiverar förutsägande optimering för alla hanterade Unity Catalog-tabeller för att förenkla dataunderhållet och minska lagringskostnaderna. Se ANALYZE TABLE.
Verifiera frågeplaner
Det finns flera sätt att verifiera frågeplanen.
EXPLAIN kommando
Om du vill kontrollera om planen använder statistik använder du SQL-kommandot EXPLAIN.
Om statistik saknas kanske frågeplanen inte är optimal.
== Optimized Logical Plan ==
Aggregate [s_store_sk], [s_store_sk, count(1) AS count(1)L], Statistics(sizeInBytes=20.0 B, rowCount=1, hints=none)
+- Project [s_store_sk], Statistics(sizeInBytes=18.5 MB, rowCount=1.62E+6, hints=none)
+- Join Inner, (d_date_sk = ss_sold_date_sk), Statistics(sizeInBytes=30.8 MB, rowCount=1.62E+6, hints=none)
:- Project [ss_sold_date_sk, s_store_sk], Statistics(sizeInBytes=39.1 GB, rowCount=2.63E+9, hints=none)
: +- Join Inner, (s_store_sk = ss_store_sk), Statistics(sizeInBytes=48.9 GB, rowCount=2.63E+9, hints=none)
: :- Project [ss_store_sk, ss_sold_date_sk], Statistics(sizeInBytes=39.1 GB, rowCount=2.63E+9, hints=none)
: : +- Filter (isnotnull(ss_store_sk) && isnotnull(ss_sold_date_sk)), Statistics(sizeInBytes=39.1 GB, rowCount=2.63E+9, hints=none)
: : +- Relation[ss_store_sk,ss_sold_date_sk] parquet, Statistics(sizeInBytes=134.6 GB, rowCount=2.88E+9, hints=none)
: +- Project [s_store_sk], Statistics(sizeInBytes=11.7 KB, rowCount=1.00E+3, hints=none)
: +- Filter isnotnull(s_store_sk), Statistics(sizeInBytes=11.7 KB, rowCount=1.00E+3, hints=none)
: +- Relation[s_store_sk] parquet, Statistics(sizeInBytes=88.0 KB, rowCount=1.00E+3, hints=none)
+- Project [d_date_sk], Statistics(sizeInBytes=12.0 B, rowCount=1, hints=none)
+- Filter ((((isnotnull(d_year) && isnotnull(d_date)) && (d_year = 2000)) && (d_date = 2000-12-31)) && isnotnull(d_date_sk)), Statistics(sizeInBytes=38.0 B, rowCount=1, hints=none)
+- Relation[d_date_sk,d_date,d_year] parquet, Statistics(sizeInBytes=1786.7 KB, rowCount=7.30E+4, hints=none)
Viktigt!
Statistiken rowCount är särskilt viktig för frågor med flera kopplingar. Om rowCount saknas innebär det att det inte finns tillräckligt med information för att beräkna den (det vill säga att vissa obligatoriska kolumner inte har statistik).
I Databricks Runtime 16.0 och senare visar utdata EXPLAIN från kommandot de refererade tabellerna som saknar, delvis och fullständig statistik, som i följande exempelutdata:
== Optimizer Statistics (table names per statistics state) ==
missing = date_dim, store
partial =
full = store_sales
Corrective actions: consider running the following command on all tables with missing or partial statistics
ANALYZE TABLE <table-name> COMPUTE STATISTICS FOR ALL COLUMNS
Spark SQL-användargränssnitt
Använd spark SQL-användargränssnittssidan för att se den utförda planen och noggrannheten i statistiken.
En rad som rows output: 2,451,005 est: N/A innebär att den här operatorn producerar cirka 2 miljoner rader och att det inte fanns någon tillgänglig statistik.
En linje som rows output: 2,451,005 est: 1616404 (1X) innebär att den här operatorn producerar cirka 2 miljoner rader, medan uppskattningen var cirka 1,6 miljoner och uppskattningsfelfaktorn var 1.
En rad som rows output: 2,451,005 est: 2626656323 innebär att den här operatorn producerar cirka 2 M rader medan uppskattningen var 2B rader, så uppskattningsfelfaktorn var 1 000.
Inaktivera den kostnadsbaserade optimeraren
CBO är aktiverat som standard. Du inaktiverar CBO genom att spark.sql.cbo.enabled ändra flaggan.
spark.conf.set("spark.sql.cbo.enabled", false)