Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Spark SQL költségalapú optimalizálót (CBO) használhat a lekérdezési tervek fejlesztéséhez. Ez különösen akkor hasznos, ha több illesztésű lekérdezést használ. Ahhoz, hogy ez működjön, fontos összegyűjteni a táblázat- és oszlopstatisztikákat, és naprakészen tartani őket.
Statisztikák gyűjtése
A CBO teljes kihasználtsága érdekében fontos összegyűjteni mind az oszlopstatisztikákat, mind pedig a táblastatisztikákat. A parancs segítségével ANALYZE TABLE manuálisan gyűjthet statisztikákat.
Tipp.
A statisztikák naprakészen tartásához futtassa a ANALYZE TABLE parancsot, miután írt a táblázatba.
Használja a következő parancsot: ANALYZE
A prediktív optimalizálás automatikusan futtatja a ANALYZE, amely a statisztikák gyűjtésére szolgáló parancs, a Unity Catalog által felügyelt táblákon. A Databricks azt javasolja, hogy engedélyezze az összes Unity Catalog által felügyelt tábla prediktív optimalizálását az adatkarbantartás egyszerűsítése és a tárolási költségek csökkentése érdekében. Lásd:ANALYZE TABLE ... SZÁMÍTÁSI STATISZTIKÁK.
Lekérdezési tervek ellenőrzése
A lekérdezési terv ellenőrzésének több módja is van.
EXPLAIN parancs
Annak ellenőrzéséhez, hogy a terv statisztikai adatokat használ-e, használja az SQL parancsot EXPLAIN.
Ha a statisztikák hiányoznak, előfordulhat, hogy a lekérdezési terv nem optimális.
== 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)
Fontos
A rowCount statisztika különösen fontos a több illesztésű lekérdezések esetében. Ha rowCount hiányzik, az azt jelenti, hogy nincs elegendő információ a kiszámításához (azaz néhány kötelező oszlop nem rendelkezik statisztikákkel).
A Databricks Runtime 16.0-s és újabb verzióiban a EXPLAIN parancs kimenete felsorolja a hiányzó, részleges és teljes statisztikával rendelkező hivatkozott táblákat, ahogyan az alábbi példakimenetben is látható:
== 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 felhasználói felület
A Spark SQL felhasználói felületén megtekintheti a végrehajtott tervet és a statisztikák pontosságát.
Egy olyan sor, mint például rows output: 2,451,005 est: N/A azt jelenti, hogy ez az operátor körülbelül 2 M sort állít elő, és nem áll rendelkezésre statisztika.
Egy olyan sor, mint például rows output: 2,451,005 est: 1616404 (1X) azt jelenti, hogy ez az operátor körülbelül 2 M sort állít elő, míg a becslés körülbelül 1,6 M volt, a becslési hibatényező pedig 1.
Egy olyan sor, mint például rows output: 2,451,005 est: 2626656323 azt jelenti, hogy ez az operátor körülbelül 2 M sort állít elő, míg a becslés 2B sor volt, így a becslési hibatényező 1000 volt.
A költségalapú optimalizáló letiltása
A CBO alapértelmezés szerint engedélyezve van. A spark.sql.cbo.enabled zászló megváltoztatásával letilthatja a CBO-t.
spark.conf.set("spark.sql.cbo.enabled", false)