Adatfájlok tömörítése optimalizálással a Delta Lake-ben
Lásd: OPTIMIZE.
Az Azure Databricks Delta Lake szolgáltatása javíthatja a táblákból származó lekérdezések olvasási sebességét. Ennek a sebességnek az egyik módja, ha a kis fájlokat nagyobbakká alakítja.
Feljegyzés
A Databricks Runtime 13.3-at vagy újabb verzióját használva a Databricks javasolja a fürtszolgáltatás használatát a Delta-táblaelrendezéshez. Lásd: Folyékony fürtözés használata Delta-táblákhoz.
A Databricks prediktív optimalizálást javasol a Delta-táblák automatikus futtatásához OPTIMIZE
. Lásd a Delta Lake prediktív optimalizálása című témakört.
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
?
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.