Adatfájl elrendezésének optimalizálása

A OPTIMIZE parancs újraírja az adatfájlokat a Delta Lake- és Apache Iceberg-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 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 liquid clustering nélküli Delta Lake-táblák opcionálisan tartalmazhatnak ZORDER BY záradékot, amely javítja az adatok klaszterezését az újraírás során. Az Apache Iceberg-táblák klaszterezési és rendezési stratégiákat használnak ZORDER helyett. A Databricks azt javasolja, hogy partíciók helyett ZORDER folyékony fürtözést használjon, vagy más adatelrendezési eljárásokat.

Lásd a(z) OPTIMIZE.

Important

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: Kényszerített újracsoportosítás.

Szintaxisbeli példák

A OPTIMIZE parancs futtatásával aktiválja a tömörítést.

SQL

OPTIMIZE table_name

Python

A Python DeltaTable API Delta Lake-specifikus.

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()

Scala

A DeltaTable API Scala nyelven kifejezetten a Delta Lake-hez készült.

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, adjon meg egy opcionális partíció-predikátumot a következő használatával WHERE:

SQL

OPTIMIZE table_name WHERE date >= '2022-11-18'

Python

A Python DeltaTable API Delta Lake-specifikus.

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

Scala

A DeltaTable API Scala nyelven kifejezetten a Delta Lake-hez készült.

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

A dobozcsomagoláshoz vegye figyelembe a következő információkat:

  • 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 dobozos csomagolás célja, hogy egyenletesen kiegyensúlyozott adatfájlokat állítsunk elő a tárolóban lévő méretükhöz képest, de nem feltétlenül a fájlonkénti kukák száma alapján. A két intézkedés azonban gyakran korrelál.

A Delta Lake-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. Mivel OPTIMIZE nem módosítja az adatokat a táblában, a beolvasás előtt és után OPTIMIZE ugyanazokkal az eredményekkel jár. OPTIMIZE A streamelési forrásként használt táblán végzett műveletek nem befolyásolják a jelenlegi vagy jövőbeli streameket, amelyek forrásként használják ezt a táblát.

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. Lásd : Automatikus tömörítés.

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 a futtatandó OPTIMIZEgyakoriságot, a teljesítmény és a költség közötti kompromisszum jön létre. 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 futtassa OPTIMIZE, majd módosítsa a gyakoriságot a költségek és a teljesítmény közötti kompromisszumok egyensúlyának megtalálásához.

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.