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 Delta Lake prediktív optimalizálása című témakört.
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.
Szintaxisbeli példák
A tömörítést a OPTIMIZE
parancs futtatásával indíthatja el:
SQL
OPTIMIZE delta.`/data/events`
Python
from delta.tables import *
deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()
vagy másik lehetőségként:
SQL
OPTIMIZE events
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
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 events WHERE date >= '2022-11-18'
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
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.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: