Megosztás a következőn keresztül:


Folyékony fürtözés használata Delta-táblákhoz

A Delta Lake folyékony fürtözés felváltja a táblaparticionálást, és ZORDER egyszerűsíti az adatelrendezési döntéseket és optimalizálja a lekérdezési teljesítményt. A folyékony fürtözés rugalmasságot biztosít a fürtözési kulcsok újradefiniálásához a meglévő adatok újraírása nélkül, így az adatok elrendezése az elemzési igények mellett idővel fejlődhet.

Fontos

A Databricks a Databricks Runtime 15.2 és újabb verzióját javasolja minden olyan táblához, amelyen engedélyezve van a folyékony fürtözés. A databricks runtime 13.3 LTS-ben és újabb verziókban elérhető a nyilvános előzetes verzió támogatása korlátozásokkal.

Feljegyzés

A folyékony fürtözést engedélyező táblák támogatják a sorszintű egyidejűséget a Databricks Runtime 13.3 LTS és újabb verziókban. A sorszintű egyidejűség általánosan elérhető a Databricks Runtime 14.2-es és újabb verziókban minden olyan táblához, amelyen engedélyezve van a törlési vektor. Lásd: Elkülönítési szintek és írási ütközések az Azure Databricksben.

Mire használható a folyékony fürtözés?

A Databricks minden új Delta-táblához folyékony fürtözést javasol. A következő példák olyan forgatókönyveket mutatnak be, amelyeknél előnyös a klaszterezés:

  • A táblázatok gyakran nagy kardinálisságú oszlopok alapján szűrnek.
  • Az adateloszlásban jelentős eltéréssel rendelkező táblák.
  • Gyorsan növekvő, karbantartást és hangolást igénylő táblák.
  • Egyidejű írási követelményekkel rendelkező táblák.
  • Idővel változó hozzáférési mintákkal rendelkező táblák.
  • Olyan táblák, ahol egy tipikus partíciós kulcs túl sok vagy túl kevés partíciót hagyhat a táblában.

Folyékony fürtözés engedélyezése

Engedélyezheti a folyékony fürtözést egy meglévő táblán vagy a tábla létrehozása során. A fürtözés nem kompatibilis a particionálással, és ZORDERaz Azure Databricks használatával kell kezelnie a táblában lévő adatok összes elrendezési és optimalizálási műveletét. A folyékony fürtözés engedélyezése után a szokásos módon futtassa OPTIMIZE a feladatokat a fürtadatok növekményes fürtadataihoz. Tekintse meg a fürtözés aktiválását ismertető témakört.

A folyékony fürtözés engedélyezéséhez adja hozzá a CLUSTER BY kifejezést egy táblalétrehozási utasításhoz, az alábbi példákhoz hasonlóan:

Feljegyzés

A Databricks Runtime 14.2-es és újabb verziójában a DataFrame API-kat és a DeltaTable API-kat használhatja Pythonban vagy Scalában a folyékony fürtözés engedélyezéséhez.

SQL

-- Create an empty table
CREATE TABLE table1(col0 int, col1 string) USING DELTA CLUSTER BY (col0);

-- Using a CTAS statement
CREATE EXTERNAL TABLE table2 CLUSTER BY (col0)  -- specify clustering after table name, not in subquery
LOCATION 'table_location'
AS SELECT * FROM table1;

-- Using a LIKE statement to copy configurations
CREATE TABLE table3 LIKE table1;

Python

# Create an empty table
(DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute())

# Using a CTAS statement
df = spark.read.table("table1")
df.write.format("delta").clusterBy("col0").saveAsTable("table2")

# CTAS using DataFrameWriterV2
df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()

Scala

// Create an empty table
DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute()

// Using a CTAS statement
val df = spark.read.table("table1")
df.write.format("delta").clusterBy("col0").saveAsTable("table2")

// CTAS using DataFrameWriterV2
val df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()

Figyelmeztetés

A folyékony fürtözéssel létrehozott táblák létrehozásakor számos Delta-táblafunkció engedélyezve van, és a Delta-író 7-es és 3-os olvasóverzióját használják. Ezen funkciók némelyikének engedélyezését felülbírálhatja. Lásd: Alapértelmezett funkció engedélyezése felülbírálása (nem kötelező).

A táblaprotokoll-verziók nem vonhatók vissza, és a fürtszolgáltatást engedélyező táblák nem olvashatók olyan Delta Lake-ügyfelek számára, amelyek nem támogatják az összes engedélyezett Delta-olvasó protokoll táblafunkcióját. Lásd : Hogyan kezeli az Azure Databricks a Delta Lake-funkciók kompatibilitását?.

Egy meglévő nem particionált Delta-táblán engedélyezheti a folyékony fürtözést az alábbi szintaxissal:

ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)

Alapértelmezett funkció engedélyezésének felülbírálása (nem kötelező)

Felülbírálhatja az alapértelmezett viselkedést, amely lehetővé teszi a Delta-tábla funkcióit a folyékony fürtözés engedélyezése során. Ez megakadályozza a táblafunkciókhoz társított olvasói és írói protokollok frissítését. A következő lépések végrehajtásához rendelkeznie kell egy meglévő táblával:

  1. Egy vagy több funkciót letiltó táblatulajdonság beállítására használható ALTER TABLE . A törlési vektorok letiltásához például futtassa a következőket:

    ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);
    
  2. Engedélyezze a folyékony fürtözést a táblán a következő futtatásával:

    ALTER TABLE <table_name>
    CLUSTER BY (<clustering_columns>)
    

Az alábbi táblázat a felülbírálható Delta-funkciókról és arról nyújt tájékoztatást, hogy az engedélyezés milyen hatással van a Databricks Runtime-verziókkal való kompatibilitásra.

Delta funkció Futtatókörnyezet kompatibilitása Az engedélyezés felülbírálandó tulajdonsága A letiltás hatása a folyékony fürtözésre
Törlési vektorok Az olvasáshoz és az íráshoz a Databricks Runtime 12.2 lTS és újabb verziója szükséges. 'delta.enableDeletionVectors' = false A sorszintű egyidejűség le van tiltva, így a tranzakciók és a fürtözési műveletek nagyobb valószínűséggel ütköznek. Lásd: Írási ütközések sorszintű egyidejűséggel.

DELETE, MERGEés UPDATE a parancsok lassabban futnak.
Sorkövetés Az íráshoz a Databricks Runtime 13.3 LTS és újabb verziója szükséges. Bármely Databricks Runtime-verzióból olvasható. 'delta.enableRowTracking' = false A sorszintű egyidejűség le van tiltva, így a tranzakciók és a fürtözési műveletek nagyobb valószínűséggel ütköznek. Lásd: Írási ütközések sorszintű egyidejűséggel.
Ellenőrzőpontok V2 Az olvasáshoz és az íráshoz a Databricks Runtime 13.3 LTS és újabb verziója szükséges. 'delta.checkpointPolicy' = 'classic' Nincs hatással a folyékony fürtözés viselkedésére.

Fürtözési kulcsok kiválasztása

A Databricks azt javasolja, hogy a gyakran használt lekérdezésszűrők alapján válasszon fürtözési kulcsokat. A fürtözési kulcsok bármilyen sorrendben meghatározhatók. Ha két oszlop van korrelálva, csak egy oszlopot kell hozzáadnia fürtkulccsal.

Legfeljebb 4 oszlopot adhat meg fürtözési kulcsként. Csak a fürtözési kulcsokhoz gyűjtött statisztikákkal rendelkező oszlopokat adhatja meg. A Delta-tábla első 32 oszlopa alapértelmezés szerint statisztikákat gyűjt. Lásd: Deltastatisztikai oszlopok megadása.

A fürtözés a következő adattípusokat támogatja a fürtözési kulcsokhoz:

  • Dátum
  • Időbélyegző
  • TimestampNTZ (a Databricks Runtime 14.3 LTS vagy újabb verziójára van szükség)
  • Sztring
  • Egész szám
  • Hosszú
  • Rövid
  • Lebegőpontos értékek
  • Dupla
  • Decimális
  • Bájt

Ha meglévő táblát konvertál, vegye figyelembe az alábbi javaslatokat:

Aktuális adatoptimalizálási technika Javaslat a fürtözési kulcsokra
Hive-stílusú particionálás Partícióoszlopok használata fürtözési kulcsként.
Z-order indexelés Fürtözési kulcsként használja az ZORDER BY oszlopokat.
Hive-stílusú particionálás és Z-sorrend Használjon partícióoszlopokat és ZORDER BY oszlopokat is fürtözési kulcsként.
A számosság csökkentésére létrehozott oszlopok (például időbélyegek dátuma) Használja az eredeti oszlopot fürtkulccsal, és ne hozzon létre generált oszlopot.

Adatok írása fürtözött táblába

Olyan Delta-íróügyfélt kell használnia, amely támogatja a folyékony fürtözés által használt Delta írási protokoll táblafunkcióit. Az Azure Databricksben a Databricks Runtime 13.3 LTS-t és újabb verziót kell használnia.

Az írási fürt által végzett műveletek a következőket tartalmazzák:

  • INSERT INTO művelet
  • CTAS és RTAS utasítások
  • COPY INTO parquet formátumból
  • spark.write.format("delta").mode("append")

A strukturált streamelési írások soha nem aktiválják a fürtözést íráskor. További korlátozások érvényesek. Lásd: Korlátozások.

Az írási fürtözés csak akkor aktiválódik, ha a tranzakció adatai elérik a méret küszöbértékét. Ezek a küszöbértékek a fürtözési oszlopok számától függően változnak, és a Unity Catalog által felügyelt táblák esetében alacsonyabbak, mint a többi Delta-tábla.

Fürtözési oszlopok száma A Unity Catalog által felügyelt táblák küszöbértékének mérete Küszöbérték mérete más Delta-táblákhoz
0 64 MB 256 MB
2 256 MB 1 GB
3 512 MB 2 GB
4 1 GB 4 GB

Mivel nem minden művelet alkalmaz folyékony fürtözést, a Databricks azt javasolja, hogy gyakran fusson OPTIMIZE , hogy az összes adat hatékonyan legyen fürtözve.

Fürtözés aktiválása

A prediktív optimalizálás automatikusan futtat OPTIMIZE parancsokat az engedélyezett táblákhoz. Lásd a Delta Lake prediktív optimalizálása című témakört.

A fürtözés aktiválásához a Databricks Runtime 13.3 LTS vagy újabb verzióját kell használnia. Használja a OPTIMIZE táblában lévő parancsot, ahogyan az alábbi példában is látható:

OPTIMIZE table_name;

A folyékony fürtözés növekményes, ami azt jelenti, hogy az adatok csak szükség szerint lesznek újraírva a fürtözendő adatok elhelyezéséhez. A fürtözendő adatoknak nem megfelelő fürtözési kulcsokkal rendelkező adatfájlok nem lesznek újraírva.

A legjobb teljesítmény érdekében a Databricks azt javasolja, hogy rendszeres OPTIMIZE feladatokat ütemezz fürtadatokba. A sok frissítést vagy beszúrást tapasztaló táblák esetében a Databricks azt javasolja, hogy egy feladatot egy vagy két óránként ütemezz OPTIMIZE . Mivel a folyékony fürtözés növekményes, a fürtözött táblák legtöbb OPTIMIZE feladata gyorsan fut.

Adatok beolvasása fürtözött táblából

A fürtözött táblákban lévő adatokat bármely olyan Delta Lake-ügyféllel olvashatja, amely támogatja a törlési vektorok olvasását. A legjobb lekérdezési eredmények érdekében a lekérdezésszűrőkbe foglalja bele a fürtözési kulcsokat, ahogyan az alábbi példában is látható:

SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";

Fürtözési kulcsok módosítása

A táblák fürtözési kulcsait bármikor módosíthatja egy ALTER TABLE parancs futtatásával, ahogyan az alábbi példában is látható:

ALTER TABLE table_name CLUSTER BY (new_column1, new_column2);

A fürtözési kulcsok módosításakor az azt követő OPTIMIZE és az írási műveletek az új fürtözési módszert használják, de a meglévő adatok nem lesznek újraírva.

A fürtözést úgy is kikapcsolhatja, hogy NONEa kulcsokat a következő példához hasonlóan állítja be:

ALTER TABLE table_name CLUSTER BY NONE;

A fürtkulcsok NONE beállítása nem írja át a már fürtözött adatokat, de megakadályozza, hogy a jövőbeli OPTIMIZE műveletek fürtözési kulcsokat használjanak.

A tábla fürtözési módjának megtekintése

DESCRIBE A parancsokkal megtekintheti egy tábla fürtözési kulcsait, ahogyan az alábbi példákban is látható:

DESCRIBE TABLE table_name;

DESCRIBE DETAIL table_name;

Kompatibilitás folyékony fürtözéssel rendelkező táblákhoz

A Databricks Runtime 14.1-ben és újabb verziókban folyékony fürtözéssel létrehozott táblák alapértelmezés szerint v2-ellenőrzőpontokat használnak. A Databricks Runtime 13.3 LTS és újabb verziókban v2-ellenőrzőpontokkal rendelkező táblákat olvashat és írhat.

A v2-ellenőrzőpontok és a leminősítési táblaprotokollok letiltásával folyékony fürtözésű táblákat olvashat a Databricks Runtime 12.2 LTS-ben és újabb verziókban. Lásd a Delta-tábla funkcióinak elvetése című témakört.

Korlátozások

Az alábbi korlátozások érvényesek:

  • A Databricks Runtime 15.1-es és újabb verziójában az írási fürtözés nem támogatja a szűrőket, illesztéseket vagy összesítéseket tartalmazó forrás lekérdezéseket.
  • A strukturált streamelési számítási feladatok nem támogatják a fürtözést íráskor.
  • Strukturált streamelési írással nem hozható létre olyan tábla, amelyen engedélyezve van a folyékony fürtözés. A strukturált streamelés használatával adatokat írhat egy meglévő táblába, amelyen engedélyezve van a folyékony fürtözés.
  • A Delta Sharing nem támogatja a táblák megosztását, ha engedélyezve van a folyékony fürtözés.