Použijte liquid clustering pro tabulky Delta
Liquid Clustering v Delta Lake nahrazuje dělení tabulek a ZORDER
zjednodušuje rozhodování ohledně rozložení dat a zlepšuje výkon dotazů. Liquid clustering poskytuje flexibilitu pro předefinování klíčů clusteringu bez přepsání existujících dat, což umožňuje vývoj rozložení dat společně s analytickými potřebami v průběhu času. Liquid Clustering se vztahuje jak na streamovací tabulky, tak na materializovaná zobrazení.
Důležité
Databricks doporučuje používat Databricks Runtime 15.2 a vyšší pro všechny tabulky s povoleným tekutým shlukováním. Podpora verze Public Preview s omezeními je dostupná v Databricks Runtime 13.3 LTS a novějších verzích.
Poznámka:
Tabulky s povoleným clusteringem Liquid podporují souběžnost na úrovni jednotlivých řádků v Databricks Runtime 13.3 LTS a vyšší. Souběžnost na úrovni řádků je obecně dostupná ve službě Databricks Runtime 14.2 a vyšší pro všechny tabulky s povolenými vektory odstranění. Viz Úrovně izolace a konflikty zápisu v Azure Databricks.
K čemu se používá shlukování kapalin?
Databricks doporučuje použít liquid clustering pro všechny nové tabulky Delta, což zahrnuje jak proudové tabulky (ST), tak materializované pohledy (MV). Tady jsou příklady scénářů, které využívají clustering:
- Tabulky se často filtrují podle sloupců s vysokou kardinalitou.
- Tabulky s významnou nerovnoměrnou distribucí dat.
- Tabulky, které rychle rostou a vyžadují údržbu a optimalizaci.
- Tabulky s požadavky na souběžné zapisování.
- Tabulky se vzory přístupu, které se v průběhu času mění.
- Tabulky, kde by typický klíč oddílu mohl způsobit, že tabulka má příliš mnoho nebo příliš málo oddílů.
Povolit clustering kapaliny
Můžete povolit liquid clustering u existující tabulky nebo během jejího vytváření. Clustering není kompatibilní s dělením nebo ZORDER
a vyžaduje, abyste ke správě všech operací rozložení a optimalizace dat v tabulce použili Azure Databricks. Po povolení funkce shlukování typu liquid spusťte OPTIMIZE
úlohy jako obvykle pro postupné shlukování dat. Viz Postup aktivace clusteringu.
Pokud chcete povolit shlukování tekutiny, přidejte frázi CLUSTER BY
do příkazu pro vytvoření tabulky, jak je uvedeno v následujících příkladech.
Poznámka:
V Databricks Runtime 14.2 a novějších můžete k povolení liquid clusteringu použít rozhraní API datového rámce a rozhraní DeltaTable API v Pythonu nebo Scaly.
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()
V Databricks Runtime 16.0 a novějších můžete vytvářet tabulky s povoleným liquid clusteringem pomocí zápisů strukturovaného streamování, jak je uvedeno v následujících příkladech.
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")
Varování
Tabulky vytvořené s povoleným liquid clusteringem mají při vytváření povolenou řadu funkcí tabulky Delta a používají Delta writer verze 7 a čtečka verze 3. Můžete změnit povolení některých z těchto funkcí. Viz Přepsání výchozího nastavení funkce (volitelné).
Verze protokolu tabulky nelze downgradovat a tabulky s povoleným clusteringem nejsou čitelné klienty Delta Lake, kteří nepodporují všechny povolené funkce tabulek protokolu Delta Reader. Viz Jak Azure Databricks spravuje kompatibilitu funkcí Delta Lake?.
Pomocí následující syntaxe můžete povolit likvidní shlukování v existující nepartitionované tabulce Delta.
ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)
Důležité
Výchozí chování nepoužívá clustering na dříve zapsaná data. Chcete-li vynutit reklasifikaci pro všechny záznamy, je nutné použít OPTIMIZE FULL
. Viz Vynucení přeclusterování pro všechny záznamy.
Pokud chcete odebrat klíče clusteringu, použijte následující syntaxi:
ALTER TABLE table_name CLUSTER BY NONE;
automatické shlukování kapalin
Ve službě Databricks Runtime 15.4 LTS a novějších můžete aktivovat automatické clusteringy pro spravované tabulky Unity Catalog. S povoleným automatickým clusteringem liquid si Azure Databricks inteligentně vybírá klíče clusteringu pro optimalizaci výkonu dotazů. Automatické shlukování kapalin povolíte pomocí klauzule CLUSTER BY AUTO
.
Pokud je tato možnost povolená, operace automatického výběru klíčů a clusteringu běží asynchronně jako operace údržby a vyžadují, aby byla pro tabulku povolená prediktivní optimalizace. Viz Prediktivní optimalizace spravovaných tabulek v katalogu Unity.
Aby bylo možné identifikovat klíče clusteringu, Azure Databricks analyzuje historickou úlohu dotazů pro tabulku a identifikuje nejlepší kandidátské sloupce. Klíče seskupení se změní, když předpokládané úspory nákladů z vylepšení přeskočení dat převýší náklady na seskupení dat.
Pokud se způsob, jakým dotazujete svá data, mění v průběhu času nebo pokud výkon dotazů naznačuje změny v distribuci dat, automatické liquid clusterování vybere nové klíče pro optimalizaci výkonu.
Poznámka:
Můžete číst nebo zapisovat tabulky s povoleným automatickým clusteringem ve všech verzích Databricks Runtime, které podporují liquid clustering, ale inteligentní výběr klíčů závisí na metadatech zavedených ve verzi 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 zakázání automatického clusteringu
Pokud chcete vytvořit novou tabulku s povoleným automatickým liquid clusteringem, použijte následující syntaxi:
CREATE OR REPLACE TABLE table_name CLUSTER BY AUTO;
Můžete také povolit automatické shlukování kapalin u existující tabulky, včetně tabulek, které dříve měly ručně zadané klíče, jak je znázorněno v následujícím příkladu:
ALTER TABLE table_name CLUSTER BY AUTO;
Tabulky s povoleným automatickým shlukováním liquid můžete také změnit tak, aby používaly ručně zadané klíče.
Poznámka:
Vlastnost clusterByAuto
je nastavena na true
, když povolíte automatické shlukování kapalin.
Vlastnost clusteringColumns
zobrazuje aktuálně zvolené sloupce klastrování, vybrané automatickým výběrem klíče. Spuštěním DESCRIBE EXTENDED table_name
zobrazte úplný seznam vlastností tabulky.
Přepsat výchozí povolení funkce (volitelné)
Výchozí chování, které umožňuje funkce tabulek Delta při povolování clusteringu liquid, můžete přepsat. Zabráníte tak upgradu protokolů čtenáře a zapisovače přidružených k těmto funkcím tabulek. Abyste mohli provést následující kroky, musíte mít existující tabulku:
Slouží
ALTER TABLE
k nastavení vlastnosti tabulky, která zakazuje jednu nebo více funkcí. Pokud chcete například zakázat vektory odstranění, spusťte následující příkaz:ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);
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 | Dopad zneschopnění na seskupování kapalin |
---|---|---|---|
Vektory odstranění | Čtení a zápisy vyžadují Databricks Runtime 12.2 LTS a vyšší. | 'delta.enableDeletionVectors' = false |
Souběžnost na úrovni řádků je zakázána, takže transakce a operace clusteringu budou s větší pravděpodobností kolidovat. Vizte Konflikty zápisu na úrovni řádkové souběžnosti.DELETE , MERGE a UPDATE příkazy můžou běžet pomaleji. |
Sledování řádků | Zápisy vyžadují Databricks Runtime 13.3 LTS a vyšší. Je možné číst z jakékoli verze Databricks Runtime. | 'delta.enableRowTracking' = false |
Souběžnost na úrovni řádků je zakázána, takže transakce a operace shlukování budou pravděpodobně kolidovat. Podívejte se na konflikty zápisu při souběžnosti na úrovni řádků. |
Kontrolní body V2 | Čtení a zápisy vyžadují Databricks Runtime 13.3 LTS a vyšší. | 'delta.checkpointPolicy' = 'classic' |
Žádný vliv na chování clustrování kapalin. |
Volba klíčů clusteringu
Databricks doporučuje automatické shlukování kapalin pro podporované tabulky. Viz automatické shlukování kapalin.
Databricks doporučuje zvolit klíče clusteringu na základě sloupců, které se nejčastěji používají ve filtrech dotazů. Klíče clusteringu je možné 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 (pod 10 TB) může použití více klíčů clusteringu (například čtyři) snížit výkon při filtrování v jednom sloupci oproti použití menšího počtu klíčů clusteringu (například dvě). S rostoucí velikostí tabulky se ale rozdíl v výkonu při použití více klíčů clusteringu pro dotazy s jedním sloupcem stává zanedbatelný.
Můžete zadat pouze sloupce, které mají statistiky shromážděné jako klíče clusteringu. Ve výchozím nastavení se statistiky shromažďují pro prvních 32 sloupců v tabulce Delta. Viz Určení sloupců statistiky Delta.
Clustering podporuje pro klíče clusteringu následující datové typy:
- Datum
- Časové razítko
- TimestampNTZ (vyžaduje Databricks Runtime 14.3 LTS nebo vyšší)
- Řetězec
- Celé číslo
- Long
- Krátké
- Float
- Dvojitý
- Desetinné číslo
- Byte
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-pořadí | Použijte sloupce ZORDER BY jako klíče pro seskupování. |
Particionování ve stylu Hive a „Z-order“ | Jako klíče clusteringu používejte sloupce oddílů i ZORDER BY sloupce. |
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. |
Zápis dat do clusterované tabulky
Musíte použít klienta Delta writer, který podporuje všechny funkce protokolu zápisu Delta používané při liquid clusteringu. V Azure Databricks musíte použít Databricks Runtime 13.3 LTS a vyšší.
Mezi operace, které se skupinově zapisují, patří:
-
INSERT INTO
operací -
CTAS
aRTAS
příkazy -
COPY INTO
z formátu Parquet spark.write.mode("append")
Strukturované streamování nikdy nevyvolává clusterování při zápisu. Platí další omezení. Viz Omezení.
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.
Počet sloupců clusteringu | Prahová velikost spravovaných tabulek v katalogu Unity | Velikost prahové hodnoty pro ostatní tabulky Delta |
---|---|---|
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.
Aktivace clusteringu
Prediktivní optimalizace automaticky spouští OPTIMIZE
příkazy pro povolené tabulky. Viz Prediktivní optimalizace spravovaných tabulek v katalogu Unity.
K aktivaci clusteringu musíte použít Databricks Runtime 13.3 LTS nebo vyšší.
OPTIMIZE
Použijte příkaz v tabulce, jak je znázorněno v následujícím příkladu:
OPTIMIZE table_name;
Liquid clustering je přírůstkový proces, což znamená, že data se přepisují jen v případě potřeby, aby umožnila seskupování dat, která je třeba seskupit. Datové soubory s klíči clusteringu, které neodpovídají datům, které se mají seskupit, se nepřepíší.
Pro zajištění nejlepšího výkonu doporučuje Databricks naplánovat pravidelné OPTIMIZE
úlohy ke shluková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.
Vynutit rekategorizaci pro všechny záznamy
V Databricks Runtime 16.0 a novějších můžete vynutit přeskupení všech záznamů v tabulce pomocí následující syntaxe:
OPTIMIZE table_name FULL;
Důležité
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ždy používejte OPTIMIZE FULL
k zajištění toho, aby rozložení dat odráželo aktuální klíče clusteringu.
Čtení dat z clusterované tabulky
Data v clusterované tabulce můžete číst pomocí libovolného klienta Delta Lake, který podporuje vektory odstranění čtení. Nejlepších výsledků dotazu dosáhnete tak, že do filtrů dotazů zahrnete klíče clusteringu, jako v následujícím příkladu:
SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";
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íší.
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řepisuje data, která již byla seskupena, ale brání tomu, aby budoucí operace OPTIMIZE
používaly klíče clusteru.
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;
Kompatibilita tabulek s clusteringem liquid
Tabulky vytvořené pomocí clusteringu liquid v Databricks Runtime 14.1 a vyšší používají ve výchozím nastavení kontrolní body v2. S kontrolními body v2 můžete číst a zapisovat tabulky v Databricks Runtime 13.3 LTS a novějších verzích.
Můžete zakázat kontrolní body verze 2 a snížit verzi protokolu tabulky, abyste mohli číst tabulky s liquid clusteringem v Databricks Runtime 12.2 LTS a vyšších. Viz funkce mazání tabulky Delta.
Omezení
Jsou to následující omezení:
- Ve verzích Databricks Runtime 15.1 a starších, seskupování při zápisu nepodporuje zdrojové dotazy, které zahrnují filtry, spojení nebo agregace.
- Úlohy strukturovaného streamování nepodporují clustering při zápisu.
- Ve verzích Databricks Runtime 15.4 LTS a starších nelze vytvořit tabulku s povoleným "liquid clustering" pomocí zápisu v rámci strukturovaného streamování. Pro psaní dat do existující tabulky s povoleným liquid clusteringem můžete použít strukturované streamování.