Adatfájl elrendezésének optimalizálása
A prediktív optimalizálás automatikusan fut OPTIMIZE
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: A Unity Catalog által felügyelt táblák prediktív optimalizálása.
A OPTIMIZE
parancs újraírja az adatfájlokat a Delta-táblák adatelrendezésének javítása érdekében. Ha a folyékony fürtözés engedélyezve van, írja át az adatfájlokat az OPTIMIZE
adatok folyékony fürtözési kulcsokkal való csoportosításához. A partíciókkal rendelkező táblák esetében a fájl tömörítése és az adatelrendezés a partíciókon belül történik.
A folyékony fürtözés nélküli táblák opcionálisan tartalmazhatnak egy záradékot ZORDER BY
az újraíráskor történő adatfürtítés javítására. A Databricks azt javasolja, ZORDER
hogy partíciók helyett folyékony fürtözést használ, vagy más adatelrendezési módszereket.
Lásd: OPTIMIZE.
Fontos
A Databricks Runtime 16.0-s és újabb verziókban a OPTIMIZE FULL
használatával kényszerítheti az újrakonfigurálást olyan táblák esetében, amelyeken engedélyezve van a folyékony fürtözés. Lásd: Az összes rekord újracsoportosításának kényszerítése.
Szintaxisbeli példák
A tömörítést a OPTIMIZE
parancs futtatásával indíthatja el:
SQL
OPTIMIZE table_name
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Ha nagy mennyiségű adattal rendelkezik, és csak egy részhalmazt szeretne optimalizálni, megadhat egy választható partíciós predikátumot a következő használatával WHERE
:
SQL
OPTIMIZE table_name WHERE date >= '2022-11-18'
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Feljegyzés
- A dobozcsomagolás optimalizálása idempotens, ami azt jelenti, hogy ha kétszer fut ugyanazon az adatkészleten, a második futtatásnak nincs hatása.
- A dobozcsomagolás célja, hogy a lemez méretéhez képest egyenletesen kiegyensúlyozott adatfájlokat állítsunk elő, fájlonként azonban nem feltétlenül. A két intézkedés azonban leggyakrabban korrelál.
- A művelet végrehajtására
OPTIMIZE
szolgáló Python és Scala API-k a Databricks Runtime 11.3 LTS-ből és újabb verziókból érhetők el.
A Delta-táblák olvasói pillanatkép-elkülönítést használnak, ami azt jelenti, hogy a rendszer nem szakítja meg őket, ha OPTIMIZE
eltávolítja a felesleges fájlokat a tranzakciónaplóból.
OPTIMIZE
nem végez adatokat érintő módosításokat a táblában, így az olvasás előtt és után OPTIMIZE
ugyanazokkal az eredményekkel rendelkezik.
OPTIMIZE
A streamelési forrásként szolgáló táblán végzett műveletek nem befolyásolják a táblázatot forrásként kezelő jelenlegi vagy jövőbeli streameket.
OPTIMIZE
Visszaadja az eltávolított fájlok és a művelet által hozzáadott fájlok fájlstatisztikáit (min, max, total stb.). A statisztikák optimalizálása a Z-Ordering statisztikát, a kötegek számát és az optimalizált partíciókat is tartalmazza.
A kis méretű fájlokat automatikus tömörítéssel is automatikusan tömörítheti. Tekintse meg a Delta Lake automatikus tömörítését az Azure Databricksben.
Milyen gyakran futtassam OPTIMIZE
?
Engedélyezze a prediktív optimalizálást a Unity Catalog által felügyelt táblákhoz, hogy OPTIMIZE
költséghatékonyan fusson automatikusan.
Amikor kiválasztja, hogy milyen gyakran fusson OPTIMIZE
, a teljesítmény és a költség között kompromisszum van. A végfelhasználói lekérdezések teljesítményének javítása érdekében gyakrabban futtassa a lekérdezést OPTIMIZE
. Ez magasabb költséget fog eredményezni a megnövekedett erőforrás-használat miatt. A költségek optimalizálásához futtassa ritkábban.
A Databricks azt javasolja, hogy először napi rendszerességgel fusson OPTIMIZE
, majd módosítsa a gyakoriságot a költségek és a teljesítmény kompromisszumoinek egyensúlyához.
Mi a legjobb futtatható OPTIMIZE
példánytípus (dobozcsomagolás és Z-Ordering)
Mindkét művelet processzorigényes művelet, amely nagy mennyiségű Parquet-dekódolást és kódolást végez.
A Databricks a Compute által optimalizált példánytípusokat javasolja.
OPTIMIZE
A csatolt SSD-k is előnyösek.