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.