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 ZORDER
az 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) 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.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.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:
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);
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űveletCTAS
ésRTAS
utasításokCOPY INTO
parquet formátumbólspark.write.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 Unity Catalog által felügyelt táblák prediktív optimalizálása.
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 NONE
a 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.