Použijte seskupování liquid pro tabulky

Liquid clustering je technika optimalizace rozložení dat, která nahrazuje partitionování tabulek a ZORDER. Zjednodušuje správu tabulek a optimalizuje výkon dotazů tím, že automaticky uspořádá data na základě klíčů clusteringu.

Na rozdíl od tradičního dělení můžete předefinovat klíče clusteringu bez přepsání existujících dat. Díky tomu se vaše rozložení dat bude vyvíjet společně s měnícími se analytickými potřebami. Clustering Liquid se vztahuje na streamované tabulky i materializovaná zobrazení.

Important

Liquid clustering je všeobecně dostupný pro tabulky Delta Lake v prostředí Databricks Runtime 15.4 LTS a vyšším a ve fázi Public Preview pro tabulky Apache Iceberg v Databricks Runtime 16.4 LTS a vyšším. Databricks doporučuje používat nejnovější databricks Runtime pro zajištění nejlepšího výkonu.

Spravované tabulky Apache Iceberg v3 také podporují vektory odstranění, sledování řádků, souběžnost na úrovni řádků a automatické clusterování Liquid. Tyto funkce vyžadují Databricks Runtime 18.0 a vyšší. Viz Použití funkcí Apache Iceberg v3.

Kdy použít seskupování kapalin

Databricks doporučuje liquidní clustering pro všechny nové tabulky, včetně streamingových tabulek a materiálovaných pohledů. Z clusteringu těží zejména následující scénáře:

  • Dotazy, které filtrují sloupce s vysokou kardinalitou
  • Tabulky s velkou nerovnoměrnou distribuci dat
  • Rychle rostoucí tabulky, které vyžadují údržbu a naladění s vynaložením úsilí.
  • Tabulky s požadavky na souběžné zapisování.
  • Tabulky s různými nebo měnícími se vzory přístupu
  • Tabulky, kde typický klíč oddílu může vracet výsledky z příliš mnoha nebo příliš málo oddílů.

Povolit clustering kapaliny

Můžete povolit liquid clustering na existující tabulce bez oddílů nebo během vytváření tabulky. Klastrování není kompatibilní s particionováním nebo ZORDER. Databricks doporučuje, aby platforma mohla spravovat všechna operace rozložení a optimalizace pro data v tabulce. Po aktivaci kontejnerového clusterování spusťte úlohy OPTIMIZE pro postupné shlukování dat. Viz Postup aktivace clusteringu.

Vytváření tabulek pomocí clusteringu

Pokud chcete povolit shlukování kapalin, přidejte CLUSTER BY frázi do příkazu pro vytvoření tabulky, jak je znázorněno v následujících příkladech. V Databricks Runtime 14.3 LTS a vyšších verzích můžete v Pythonu nebo Scale použít rozhraní DataFrame API a DeltaTable API k povolení liquid clusteringu pro tabulky Delta Lake.

SQL

Vytvoření prázdné tabulky pomocí clusteringu:

CREATE TABLE table1 (col0 INT, col1 STRING) CLUSTER BY (col0);

Pokud chcete vytvořit tabulku z existujících dat pomocí clusteringu, CLUSTER BY musí se zobrazit za názvem tabulky, nikoli v klauzuli SELECT :

CREATE TABLE table2 CLUSTER BY (col0)
AS SELECT * FROM table1;

Kopírování struktury tabulky včetně konfigurace clusteringu:

CREATE TABLE table3 LIKE table1;

Python

Vytvoření prázdné tabulky s clusteringem pomocí DeltaTable rozhraní API:

(DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute())

Vytvoření tabulky z existujícího datového rámce:

df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")

Vytvoření tabulky pomocí DataFrameWriterV2 rozhraní API (dostupného v Databricks Runtime 14.2 a vyšší):

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

Scala

Vytvoření prázdné tabulky s clusteringem pomocí DeltaTable rozhraní API:

DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute()

Vytvoření tabulky z existujícího datového rámce:

val df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")

Vytvoření tabulky pomocí DataFrameWriterV2 rozhraní API (dostupného v Databricks Runtime 14.2 a vyšší):

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

Important

Při použití rozhraní API datového rámce k nastavení klíčů clusteringu můžete během vytváření tabulky nebo při použití overwrite režimu (například s operacemi CREATE OR REPLACE TABLE ) zadat pouze sloupce clusteringu. Při použití append režimu nelze změnit klíče clusteringu.

Pokud chcete změnit klíče clusteringu v existující tabulce při připojování dat, použijte příkazy SQL ALTER TABLE k úpravě konfigurace clusteringu odděleně od operací zápisu dat. Viz Změna klíčů clusteringu.

V Databricks Runtime 16.4 LTS a vyšším můžete pomocí zápisu pomocí Structured Streaming vytvářet tabulky s povoleným liquid clusteringem, jak ukazují následující příklady:

SQL

CREATE TABLE table1 (
  col0 STRING,
  col1 DATE,
  col2 BIGINT
)
CLUSTER BY (col0, col1);

Python

(spark.readStream.table("source_table")
  .writeStream
  .clusterBy("column_name")
  .option("checkpointLocation", checkpointPath)
  .toTable("target_table")
)

Scala

spark.readStream.table("source_table")
  .writeStream
  .clusterBy("column_name")
  .option("checkpointLocation", checkpointPath)
  .toTable("target_table")

Warning

Tabulky Delta Lake s povoleným liquid clusteringem používají zapisovač Delta verze 7 a čtečku Delta verze 3. Klienti Delta, kteří tyto protokoly nepodporují, nemůžou tyto tabulky číst. Verzi protokolu tabulky nelze snížit. Viz kompatibilita a protokoly funkcí Delta Lake.

Pokud chcete změnit výchozí povolení funkcí, například vektorů odstranění, přečtěte si téma Změna výchozího povolení funkcí (volitelné).

Povolit u existujících tabulek

Pokud chcete u existující neoddělené tabulky Delta Lake povolit liquid clustering, postupujte takto:

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

V případě spravovaných tabulek Apache Iceberg zvažte následující:

  • U tabulek se specifikací v2 je nutné při povolení liquid clusteringu u existující tabulky explicitně vypnout vektory odstranění a sledování řádků.
  • U tabulek se specifikací v3 není vypnutí těchto funkcí povinné, protože se podporují vektory odstranění a sledování řádků. Viz Použití funkcí Apache Iceberg v3.

Poznámka:

Výchozí chování nepoužívá clustering na dříve zapsaná data. Chcete-li vynutit přeskupování, použijte OPTIMIZE FULL nebo OPTIMIZE FULL WHERE <predicate>. Viz Nucené opětovné seskupení.

Převést dělenou tabulku na liquid clustering

V Databricks Runtime 18.1 a vyšší použijte REPLACE PARTITIONED BY WITH CLUSTER BY v příkazu ALTER TABLE k převedení existující tabulky Delta Lake rozdělené do oddílů na liquid clustering. Převod minimalizuje výpadky čtečky a zapisovače a podporuje externí i spravované tabulky. Po převodu lze tabulku číst pomocí Databricks Runtime 13.3 LTS a novějšího.

Poznámka:

U spravovaných tabulek Iceberg není konverze nutná, protože tyto tabulky používají definice particí jako klíče pro liquid clustering. Spuštění příkazu převodu vyvolá chybu.

Mezi výhody převedení partitionovaných tabulek na liquid clustering patří:

  • Vylepšení výkonu pro tabulky, které trpí nedostatečným přeskakováním dat nebo nadměrným dělením na oddíly.
  • Automatická vylepšení výkonu pomocí , CLUSTER BY AUTOpro tabulky s často se měnícími vzory dotazů.
  • Sloupce clusteringu jsou flexibilní a lze je snadno měnit, zatímco particionování je striktní a obtížně se mění.
  • Snížené konflikty při zápisu, protože tabulky s technologií Liquid Clustering umožňují souběžnost na úrovni řádků. Viz souběžnost na úrovni řádků.

Syntax

ALTER TABLE <table_name>
REPLACE PARTITIONED BY WITH CLUSTER BY [( <clustering_columns> ) | AUTO]

Klauzule CLUSTER BY podporuje následující možnosti:

  • ( <clustering_columns> ): Určuje nové sloupce clusteringu. Databricks doporučuje, aby nové sloupce pro shlukování byly podobné původním sloupcům dělení. Použití značně odlišných sloupců spustí při prvním spuštění OPTIMIZE rozsáhlé přeskupení clusterů.
  • AUTO: Používá aktuální sloupce oddílů jako výchozí sloupce pro clustering a umožňuje prediktivní optimalizaci, aby se v průběhu času přizpůsobovala. K dispozici pouze pro spravované tabulky Katalogu Unity. Viz Automatické shlukování kapalin.
  • Nejsou zadány žádné možnosti: Používá aktuální sloupce oddílů jako nové sloupce clusteringu.

Pokyny k výběru klíčů clusteringu při migraci z dělených tabulek najdete v tématu Migrace z dělení nebo pořadí Z.

Examples

Pokud chcete seskupovat podle jiných sloupců, než jaké se používají pro původní partice, například u tabulky rozdělené do particí podle (year, month, day), postupujte takto:

ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (day, id);
OPTIMIZE t1;

Poznámka:

Pokud chcete využít výhod změny sloupců clusteringu, musíte spustit OPTIMIZE.

Chcete-li použít automatické Liquid Clustering a začít s aktuálními sloupci dělení, postupujte takto:

ALTER TABLE t2 REPLACE PARTITIONED BY WITH CLUSTER BY AUTO;

Pokud chcete zachovat aktuální sloupce oddílů jako sloupce clusteringu, postupujte takto:

ALTER TABLE t3 REPLACE PARTITIONED BY WITH CLUSTER BY;

Zpracovávejte souběžná čtení a zápisy při převodu

Po převodu jsou pro operace čtení i zápisu podporovány Databricks Runtime verze 13.3 LTS a vyšší. Azure Databricks doporučuje Databricks Runtime 15.4 LTS a vyšší pro úlohy, které během převodu čtou nebo zapisují do tabulky.

Informace o zpracování souběžných úloh čtení a zápisu během převodu najdete v následující tabulce:

Typ úlohy Čtení během převodu Zápisy během převodu
Batch Bez výpadků. Všechny verze Databricks Runtime mohou tabulku během převodu číst. Ve službě Databricks Runtime 15.4 a novějších není žádný výpadek.
Pro Databricks Runtime 15.3 a novější doporučuje Databricks pozastavit úlohy před převodem a po dokončení převodu restartovat úlohy.
Streaming Se sledováním schématu a mapováním sloupců: Restartujte stream bez ztráty jakýchkoli commitů.
Bez sledování schématu a mapování sloupců: Stream vyvolá výjimku. Restartovat s novým umístěním kontrolního bodu a počáteční verzí. Potvrzení se neztratí.
Restartujte stream bez ztráty jakýchkoli commitů.

Ověřte nebo vraťte převod zpět

Potvrďte převod spuštěním DESCRIBE EXTENDED, aby se zobrazily nové sloupce pro clustering. Spusťte DESCRIBE HISTORY; zobrazí se série operací REORG, operace UPGRADE PROTOCOL a operace REPLACE PARTITIONED BY WITH CLUSTER BY.

Chcete-li vrátit převod zpět, použijte RESTORE k návratu na předchozí verzi. Případně můžete tabulku přepsat pomocí REPLACE TABLE ... PARTITIONED BY (...) AS SELECT * FROM ....

Chcete-li provést vrácení zpět pomocí RESTORE, spusťte následující příkazy:

ALTER TABLE my_table CLUSTER BY NONE;
ALTER TABLE my_table UNSET TBLPROPERTIES ('delta.liquid.hierarchicalClusteringColumns');
RESTORE TABLE my_table TO VERSION AS OF <version_number_before_conversion>;

Viz RESTORE.

Převeďte tabulku rozdělenou podle sloupce s časovým razítkem

Pokud chcete převést tabulku (t1), která je rozdělená podle sloupce časového razítka (timestamp_col) a použít sloupec časového razítka jako klíč clusteringu, musíte nastavit další konfigurace:

SET spark.databricks.delta.liquidConversion.statsGeneration.enabled = false;
ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (timestamp_col, id);
ANALYZE TABLE t1 COMPUTE DELTA STATISTICS;

Pokud se pokusíte převést sloupec oddílu s časovým razítkem na clusterovací sloupec bez těchto konfigurací, příkaz vyvolá chybu:

ALTER TABLE REPLACE PARTITIONED BY WITH CLUSTER BY cannot auto-generate stats on table with column event_ts due to unsupported type: timestamp. Disable stats auto-generation by setting 'spark.databricks.delta.liquidConversion.statsGeneration.enabled' to 'false' and retry the command again. SQLSTATE: 42000

Omezení převodu

Pro příkaz převodu REPLACE PARTITIONED BY WITH CLUSTER BY platí následující omezení:

  • Streamované tabulky a materializovaná zobrazení vytvořená v deklarativních kanálech Sparku Lakeflow se nepodporují. Chcete-li používat liquid clustering, musíte aktualizovat definici pipeline tak, aby se místo PARTITIONED BY používalo CLUSTER BY.
  • Tabulky, které používají Delta Sharing s filtrováním podle oddílů, nejsou podporovány. Informace o filtrování podle oddílů pro Delta Sharing najdete v tématu Zadání oddílů tabulky ke sdílení.

Odebrání klíčů clusteringu

Pokud chcete odebrat klíče clusteringu, použijte následující syntaxi:

ALTER TABLE table_name CLUSTER BY NONE;

Volba klíčů clusteringu

Zvolte klíče clusteringu na základě sloupců, které se nejčastěji používají ve filtrech dotazů. Správné klávesy výrazně zlepšují přeskočení dat a výkon dotazů.

Tip

Databricks doporučuje používat automatické kapalinové clusterování k inteligentnímu výběru clusterovacích klíčů na základě vzorců vašich dotazů. Viz Automatické shlukování kapalin.

Pokyny pro výběr klíčových parametrů

Při ručním zadávání klíčů clusteringu zvolte sloupce na základě sloupců, které se nejčastěji používají ve filtrech dotazů. Klíče clusteringu můžete definovat v libovolném pořadí. Pokud jsou dva sloupce vysoce korelované, stačí jeden z nich zahrnout jenom jako klíč clusteringu.

Můžete zadat až čtyři klíče clusteringu. U menších tabulek (méně než 10 TB) může použití více klíčů clusteringu snížit výkon při filtrování v jednom sloupci. Například filtrování pomocí čtyř klíčů je horší než filtrování se dvěma klíči. S rostoucí velikostí tabulky se však tento rozdíl v výkonu u dotazů s jedním sloupcem stává zanedbatelný.

Klíče clusteringu musí být sloupce se shromážděnými statistikami. Tabulky Delta Lake ve výchozím nastavení shromažďují statistiky pro prvních 32 sloupců. Viz Určení sloupců statistiky.

Podporované datové typy

Clustering podporuje tyto datové typy pro klíče clusteringu:

  • Date
  • Časová značka
  • TimestampNTZ (Databricks Runtime 14.3 LTS a vyšší)
  • String
  • Celé číslo, Dlouhé, Krátké, Bajt
  • Float (float), Double (dvojitý), Decimal (desetinný)

Můžete seskupovat podle StructField pomocí tečkové notace, například CLUSTER BY (struct_col.field). Vnořená pole struktury jsou podporována pro jakoukoli hloubku, například CLUSTER BY (struct_col.nested.field). Datový typ pole musí být jedním z podporovaných typů v předchozím seznamu.

Seskupování nejde provést pomocí žádné z následujících možností:

  • Komplexní typy, například StructType, MapTypenebo ArrayType
  • MapType a ArrayType prvky, například map_col['key'], array_col[0] nebo map_col.key.

Migrace z dělení nebo pořadí Z

Important

Databricks doporučuje použít automatický převod s příkazem REPLACE PARTITIONED BY WITH CLUSTER BY . Viz Převést particionovanou tabulku na liquid clustering.

Pokud převádíte existující tabulku, zvažte následující doporučení:

Aktuální technika optimalizace dat Doporučení pro klíče clusteringu
Dělení ve stylu Hive Používejte partiční sloupce jako klíče seskupení.
Indexování Z-order Použijte sloupce ZORDER BY jako klíče pro seskupování.
Particionování ve stylu Hive a „Z-order“ Používejte oddílové sloupce i sloupce ZORDER BY jako klíče clusteringu.
Vygenerované sloupce pro snížení kardinality (například datum časového razítka) Použijte původní sloupec jako klíč clusteringu a nevytvávejte vygenerovaný sloupec.

automatické shlukování kapalin

V Databricks Runtime 15.4 LTS a vyšších verzích můžete povolit automatické kapalné shlukování pro spravované tabulky Delta Lake v Unity Catalogu. Pro tabulky Apache Iceberg v3 spravované službou Unity Catalog vyžaduje automatické liquid clustering Databricks Runtime 18.0 a novější. Automatické shlukování umožňuje systému Azure Databricks inteligentně volit klíče pro shlukování za účelem optimalizace výkonu dotazů pomocí klauzule CLUSTER BY AUTO.

Poznámka:

Automatické shlukování kapalin je také podporováno pro materializovaná zobrazení a streamovací tabulky, včetně deklarativních kanálů Sparku Lakeflow a samostatných kanálů. Zadejte CLUSTER BY AUTO do definice kanálu zpracování nebo definice SQL.

Jak funguje automatické shlukování kapalin

Automatické shlukování kapalin vyžaduje prediktivní optimalizaci pro automatické operace výběru klíčů a clusteringu a spouští se asynchronně. Viz prediktivní optimalizaci pro spravované tabulky v katalogu Unity .

Automatické shlukování kapalin používá inteligentní optimalizace na základě vašich vzorů využití:

  • Analyzuje zátěž dotazu: Azure Databricks analyzuje zaznamenanou zátěž dotazu tabulky a identifikuje nejvhodnější sloupce pro seskupování.
  • Přizpůsobí se změnám: Pokud se vzory dotazů nebo distribuce dat v průběhu času změní, automatické clusterování liquid vybere nové klíče pro optimalizaci výkonu.
  • Nákladově uvědomělý výběr: Azure Databricks změní klíče clusteringu pouze tehdy, když předpokládané úspory nákladů z vylepšení přeskakování dat převyšují náklady na clustering dat.

Automatické shlukování kapalin nemusí vybrat klíče z následujících důvodů:

  • Tabulka je příliš malá, aby byla přínosná pro shlukování kapalin.
  • Tabulka již má efektivní schéma clusteringu, a to buď z předchozích ručních klíčů, nebo přirozené pořadí vložení, které odpovídá vzorům dotazu.
  • Tabulka neobsahuje časté dotazy.
  • Nepoužíváte Databricks Runtime 15.4 LTS ani novější.

Můžete použít automatické seskupování dat pro všechny tabulky spravované pomocí Katalogu Unity, bez ohledu na data a vlastnosti dotazů. Heuristika rozhoduje, jestli je cenově výhodné vybrat klíče clusteringu.

Kompatibilita verzí modulu Databricks Runtime

Tabulky můžete číst nebo zapisovat s povoleným automatickým clusteringem ve všech verzích Databricks Runtime, které podporují tekuté clustering. Výběr inteligentního klíče ale závisí na metadatech zavedených v Databricks Runtime 15.4 LTS.

Pomocí databricks Runtime 15.4 LTS nebo vyšší zajistěte, aby automaticky vybrané klíče využívaly všechny vaše úlohy a aby se tyto úlohy při výběru nových klíčů zvažují.

Povolení nebo vypnutí automatického seskupování tekutin

SQL

Vytvoření tabulky s automatickým shlukováním kapalin:

CREATE OR REPLACE TABLE table1 (column01 int, column02 string) CLUSTER BY AUTO;

Povolení automatického clusteringu liquid v existující tabulce, včetně tabulek s ručně zadanými klíči:

ALTER TABLE table1 CLUSTER BY AUTO;

Chcete-li nastavit počáteční vodítka pro seskupovací sloupce pro výběr klíčů, nastavte seskupovací klíče a poté zapněte automatické seskupování:

ALTER TABLE table1 CLUSTER BY (c1, c2);
ALTER TABLE table1 CLUSTER BY AUTO;

Případně můžete použít rozhraní API Python k nastavení tipů v jedné operaci.

Vypnutí automatického shlukování kapalin:

ALTER TABLE table1 CLUSTER BY NONE;

Vypnutí automatického shlukování kapalin a zadání sloupců clusteringu:

ALTER TABLE table1 CLUSTER BY (column01, column02);

Pokud má existující tabulka povolené automatické liquid clustering, spuštění CREATE OR REPLACE table_name bez CLUSTER BY AUTO vypne automatický clustering a nezachová sloupce pro clustering. Chcete-li zachovat automatické shlukování kapalin a všechny dříve vybrané sloupce, zahrňte CLUSTER BY AUTO do příkazu replace. S funkcí CLUSTER BY AUTO prediktivní optimalizace se k určení nejvhodnějších klíčů seskupení využívá historická zátěž dotazů pro danou tabulku.

Python

Rozhraní Python API je k dispozici v Databricks Runtime 16.4 a novějších. Python můžete použít jenom při vytváření nebo nahrazování tabulky. Pomocí SQL můžete změnit clusterByAuto stav existující tabulky.

Vytvoření tabulky s automatickým shlukováním kapalin pomocí DataFrameWriter:

df = spark.read.table("table1")
df.write
  .format("delta")
  .option("clusterByAuto", "true")
  .saveAsTable(...)

Nastavení počátečních tipů ke sloupci clusteringu pro výběr klíče pomocí DataFrameWriter:

df.write
  .format("delta")
  .clusterBy("clusteringColumn1", "clusteringColumn2")
  .option("clusterByAuto", "true")
  .saveAsTable(...)

Vytvoření tabulky s automatickým shlukováním kapalin pomocí DataFrameWriterV2:

df.writeTo(...).using("delta")
  .option("clusterByAuto", "true")
  .create()

Nastavení počátečních tipů ke sloupci clusteringu pro výběr klíče pomocí DataFrameWriterV2:

df.writeTo(...).using("delta")
  .clusterBy("clusteringColumn1", "clusteringColumn2")
  .option("clusterByAuto", "true")
  .create()

Chcete-li vytvořit streamovací tabulku s automatickým shlukováním Liquid:

spark.readStream.table("source_table")
  .writeStream
  .option("clusterByAuto", "true")
  .option("checkpointLocation", checkpointPath)
  .toTable("target_table")

Nastavit počáteční vodítka pro sloupce clusteringu při výběru klíče ve streamovací tabulce:

spark.readStream.table("source_table")
  .writeStream
  .clusterBy("column1", "column2")
  .option("clusterByAuto", "true")
  .option("checkpointLocation", checkpointPath)
  .toTable("target_table")

Pokud použijete .clusterBy nápovědy pro výběr klíče clusteru společně s .option('clusterByAuto', 'true'), chování je následující:

  • Pokud se tím nastaví automatické shlukování kapalin poprvé, jsou sloupce clusteringu nastaveny na zadané sloupce v .clusterBy.
  • Pokud se jedná o existující tabulku se zapnutým automatickým seskupováním Liquid, pokyn .clusterBy je přijat pouze jednou. Například sloupce určené podle .clusterBy jsou nastaveny pouze v případě, že tabulka nemá nastavené clusteringové sloupce.

Important

Při použití rozhraní API clusterByAuto datového rámce lze tuto možnost nastavit pouze při použití overwrite režimu. Při použití clusterByAuto režimu nelze nastavitappend. Toto omezení je stejné jako při ručním nastavování sloupců clusteringu. Nastavení clusteringu můžete nakonfigurovat pouze při vytváření nebo nahrazování tabulek pomocí overwrite režimu.

Alternativním řešením je změnit clusterByAuto stav existující tabulky při připojování dat pomocí příkazů SQL ALTER TABLE k úpravě konfigurace clusteringu odděleně od operací zápisu dat.

Kontrola povolení automatického clusteringu

Pokud chcete zkontrolovat, jestli je v tabulce zapnuté automatické shlukování kapalin, použijte DESCRIBE TABLE nebo SHOW TBLPROPERTIES.

Pokud je zapnuté automatické shlukování kapalin, je vlastnost clusterByAuto nastavena na hodnotu true. Tato clusteringColumns vlastnost zobrazuje aktuální sloupce clusteringu, které byly automaticky nebo ručně vybrány.

Limitations

Automatické shlukování kapalin není dostupné pro spravované tabulky Apache Iceberg v2. Podporuje se pro spravované tabulky Apache Iceberg v3 v Databricks Runtime 18.0 a vyšší.

Zápis dat do clusterované tabulky

Pokud chcete zapisovat do clusterované tabulky Delta Lake, musíte použít klienta Delta Writer, který podporuje všechny funkce tabulek protokolu zápisu Delta používané clusteringem liquid. K zápisu do clusterované tabulky Iceberg můžete použít rozhraní REST Catalog API katalogu Unity. V Azure Databricks musíte použít Databricks Runtime 13.3 LTS a vyšší.

Operace, které podporují clustrování při zápisu

Mezi operace, které se skupinově zapisují, patří:

  • INSERT INTO operací
  • CTAS a RTAS příkazy
  • COPY INTO z formátu Parquet
  • spark.write.mode("append")

Prahové hodnoty velikosti pro clustering

Clustering při zápisu se aktivuje pouze v případech, kdy data v transakci splňují prahovou hodnotu velikosti. Tyto prahové hodnoty se liší podle počtu sloupců clusteringu a jsou nižší pro spravované tabulky Katalogu Unity než u jiných tabulek Delta Lake.

Počet klastrovacích sloupců Prahová velikost spravovaných tabulek v katalogu Unity Velikost prahové hodnoty pro ostatní tabulky Delta Lake
1 64 MB 256 MB
2 256 MB 1 GB
3 512 MB 2 GB
4 1 GB 4 GB

Vzhledem k tomu, že ne všechny operace aplikují "liquid clustering," Databricks doporučuje časté spuštění OPTIMIZE k zajištění efektivního vytváření clusterů pro všechna data.

Streamové zátěže

Úlohy strukturovaného streamování podporují clustering při zápisu, když nastavíte Spark konfiguraci spark.databricks.delta.liquid.eagerClustering.streaming.enabled na true. Clustering pro tyto úlohy se aktivuje jenom v případě, že alespoň jedna z posledních pěti aktualizací streamování překročí prahovou hodnotu velikosti z výše uvedené tabulky.

Jak spustit shlukování

Prediktivní optimalizace automaticky spouští OPTIMIZE příkazy pro povolené tabulky. Viz prediktivní optimalizaci pro spravované tabulky v katalogu Unity . Při použití prediktivní optimalizace doporučuje Databricks zakázat všechny naplánované OPTIMIZE úlohy.

K aktivaci clusteringu musíte použít Databricks Runtime 13.3 LTS nebo vyšší. Databricks doporučuje Databricks Runtime 17.3 LTS a novější kvůli vyššímu výkonu OPTIMIZE při práci s velkými tabulkami. Na vaší tabulce použijte příkaz OPTIMIZE.

OPTIMIZE table_name;

Clustering u Liquid je inkrementální, což znamená, že data se přepíší pouze podle potřeby, aby vyhovovala datům, která je třeba seskupit. OPTIMIZE nepřepisuje datové soubory pomocí klíčů clusteringu, které neodpovídají clusterovaným datům. Viz Nucené opětovné seskupení.

Pokud nepoužíváte prediktivní optimalizaci, Databricks doporučuje naplánovat pravidelné spouštění úloh OPTIMIZE pro seskupování dat. U tabulek, u kterých dochází k mnoha aktualizacím nebo vkládáním, databricks doporučuje naplánovat OPTIMIZE úlohu každých jednu nebo dvě hodiny. Vzhledem k tomu, že kapalinové seskupování je přírůstkové, většina OPTIMIZE úloh pro seskupené tabulky je zpracována rychle.

Vynucení překluzování

V Databricks Runtime 16.4 LTS a vyšší můžete vynutit opětovné přeskupení všech záznamů v tabulce pomocí následující syntaxe:

OPTIMIZE table_name FULL;

Important

Příkaz OPTIMIZE FULL podle potřeby přeskupuje všechna existující data. U velkých tabulek, které nebyly dříve clusterovány na zadaných klíčích, může tato operace trvat hodiny.

Spusťte OPTIMIZE FULL při prvním povolení clusteringu nebo změně klíčů clusteringu. Pokud jste dříve spustili OPTIMIZE FULL a nedošlo k žádné změně klíčů clusteringu, OPTIMIZE FULL se spustí stejně jako OPTIMIZE. V tomto scénáři OPTIMIZE se používá přírůstkový přístup a pouze přepisuje soubory, které nebyly dříve komprimovány. Vždy používejte OPTIMIZE FULL k zajištění toho, aby rozložení dat odráželo aktuální klíče clusteringu.

Částečné překluzování

V Databricks Runtime 18.1 a novějších můžete vynutit opětovné seskupení pro podmnožinu záznamů pomocí OPTIMIZE FULL WHERE <predicate>. Soubor je zahrnutý, pokud se některá část jeho rozsahu překrývají s predikátem. Viz parametry.

OPTIMIZE events FULL WHERE event_date >= '2025-01-01';

Čtení dat z clusterované tabulky

Data v clusterované tabulce Delta Lake můžete číst pomocí libovolného klienta Delta Lake, který podporuje čtení vektorů odstranění. Pomocí rozhraní API katalogu Iceberg můžete číst data v clusterované tabulce Iceberg. Clustering Liquid zlepšuje výkon dotazů prostřednictvím automatického přeskočení dat při filtrování klíčů clusteringu.

SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";

Správa klíčů clusteringu

Podívejte se, jak je tabulka clusterovaná.

Pomocí DESCRIBE příkazů můžete zobrazit klíče clusteringu pro tabulku, jak je znázorněno v následujících příkladech:

DESCRIBE TABLE table_name;

DESCRIBE DETAIL table_name;

Změna klíčů clusteringu

Klíče clusteringu pro tabulku můžete kdykoli změnit spuštěním ALTER TABLE příkazu, jak je znázorněno v následujícím příkladu:

ALTER TABLE table_name CLUSTER BY (new_column1, new_column2);

Když změníte klíče clusteringu, následné OPTIMIZE operace zápisu používají nový přístup ke clusteringu, ale stávající data se nepřepíší. Pokud chcete přepsat existující data aktualizovanými klíči seskupování, přečtěte si téma Vynucení přeskupení.

Clustering můžete také vypnout nastavením klíčů na NONE, jako v následujícím příkladu:

ALTER TABLE table_name CLUSTER BY NONE;

Nastavení klíčů clusteru na NONE nepřepíše clusterovaná data, ale zabrání budoucím OPTIMIZE operacím v používání klíčů clusteringu.

Použití liquidního clusteringu z externího enginu

Na spravovaných tabulkách Icebergu můžete povolit shlukování kapalin z externích ledových motorů. Pokud chcete povolit liquid shlukování, určete sloupce oddílů při vytváření tabulky. Katalog Unity interpretuje oddíly jako klíče clusteringu. Spusťte například následující příkaz v OSS Sparku:

CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY c1;

Vypnutí shlukování kapalin:

ALTER TABLE main.schema.icebergTable DROP PARTITION FIELD c2;

Změna klíčů clusteringu s využitím vývoje oddílů Iceberg:

ALTER TABLE main.schema.icebergTable ADD PARTITION FIELD c2;

Pokud specifikujete oddíl prostřednictvím transformace pomocí bucketů, Unity Catalog zahodí tento výraz a použije sloupec jako klíč pro seskupování.

CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY (bucket(c1, 10));

Kompatibilita tabulek s clusteringem liquid

Clustering Liquid používá funkce tabulky Delta Lake, které pro čtení a zápis vyžadují konkrétní verze modulu Databricks Runtime. Tabulky vytvořené pomocí liquid clusteringu v Databricks Runtime 14.3 LTS a novějších ve výchozím nastavení používají checkpoint V2. V Databricks Runtime 13.3 LTS a vyšší můžete číst a zapisovat tabulky pomocí systému "Checkpoint V2". Viz Kontrolní bod V2.

Pokud chcete podporovat čtenáře používající Databricks Runtime 12.2 LTS na 13.2, zakažte kontrolní bod V2 a downgradujte protokol tabulky. Viz Přepnout na klasickou verzi.

Přepsat výchozí povolení funkce (volitelné)

Při povolování liquid clusteringu můžete přepsat výchozí povolení funkcí tabulky Delta Lake. To brání upgradům protokolů pro čtení a zápis přidružených k těmto funkcím tabulky. Abyste mohli provést následující kroky, musíte mít existující tabulku:

  1. Slouží ALTER TABLE k nastavení vlastnosti tabulky, která vypne jednu nebo více funkcí. Pokud chcete například vypnout vektory odstranění, spusťte následující příkaz:

    ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);
    
  2. Povolte liquid clustering v tabulce spuštěním následujícího příkazu:

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

Následující tabulka obsahuje informace o funkcích Delta, které můžete přepsat a jak povolení ovlivňuje kompatibilitu s verzemi Databricks Runtime:

Funkce Delta Kompatibilita modulu runtime Vlastnost pro překonání aktivace Účinky na shlukování kapalin, pokud je vypnuté
Vektory odstranění Čtení a zápisy vyžadují Databricks Runtime 12.2 LTS a vyšší. 'delta.enableDeletionVectors' = false Vypnutí vektorů odstranění také vypne souběžnost na úrovni řádků, takže u transakcí a operací shlukování bude pravděpodobnější, že dojde ke konfliktu. Viz souběžnost na úrovni řádků.
DELETE, MERGEa UPDATE příkazy můžou běžet pomaleji.
Sledování řad Operace zápisu vyžadují Databricks Runtime 13.3 LTS nebo vyšší. Je možné číst z jakékoli verze Databricks Runtime. 'delta.enableRowTracking' = false Vypnutí sledování řádků také vypne souběžnost na úrovni jednotlivých řádků, takže transakce a operace clusteringu budou pravděpodobněji vzájemně v konfliktu. Viz souběžnost na úrovni řádků.
Kontrolní bod V2 Čtení a zápisy vyžadují Databricks Runtime 13.3 LTS a vyšší. 'delta.checkpointPolicy' = 'classic' Žádný vliv na chování shlukování kapalin. Viz Kontrolní bod V2.

Limitations

  • Databricks Runtime 15.1 a níže: Klastrování při zápisu nepodporuje zdrojové dotazy, které zahrnují filtry, joiny nebo agregace.
  • Databricks Runtime 15.4 LTS a níže: Pomocí zápisu strukturovaného streamování nelze vytvořit tabulku s povoleným clusteringem s kapalinou. Pro psaní dat do existující tabulky s povoleným liquid clusteringem můžete použít strukturované streamování.
  • Apache Iceberg v2: Souběžnost na úrovni řádků není podporovaná u spravovaných tabulek Apache Iceberg v2, protože vektory odstranění a sledování řádků se nepodporují.
    • Souběžnost na úrovni řádků se podporuje u spravovaných tabulek Apache Iceberg v3, protože specifikace v3 podporuje vektory odstranění a sledování řádků. Viz Použití funkcí Apache Iceberg v3.