Použití clusteringu liquid pro tabulky Delta

Clustering Delta Lake Liquid nahrazuje dělení tabulek a ZORDER zjednodušuje rozhodování o rozložení dat a optimalizuje 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.

Důležité

Databricks doporučuje používat Databricks Runtime 15.2 a vyšší pro všechny tabulky s povoleným clusteringem liquid. 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 řádků ve službě 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 clustering liquid pro všechny nové tabulky Delta. 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é se rychle zvětšují a vyžadují údržbu a ladění.
  • Tabulky s požadavky na souběžné zapisování.
  • Tabulky se vzory přístupu, které se v průběhu času mění.
  • Tabulky, ve kterých by typický klíč oddílu mohl opustit tabulku s příliš velkým nebo příliš malým počtem oddílů.

Povolení clusteringu liquid

V existující tabulce nebo při vytváření tabulky můžete povolit cluster liquid. Clustering není kompatibilní s dělením nebo ZORDERa vyžaduje, aby klient Azure Databricks spravuje všechny operace rozložení a optimalizace pro data v tabulce. Po povolení spouštějte OPTIMIZE úlohy jako obvykle pro přírůstková data clusteru. Viz Postup aktivace clusteringu.

Pokud chcete povolit clustering liquid, 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:

Poznámka:

V Databricks Runtime 14.2 a novějších můžete k povolení clusteringu liquid použít rozhraní API datového rámce a rozhraní DeltaTable API v Pythonu nebo Scala.

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()

Upozorňující

Tabulky vytvořené s povoleným clusteringem liquid mají při vytváření povolenou řadu funkcí tabulky Delta a používají Delta Writer verze 7 a čtecí verzi 3. Povolení některých z těchto funkcí můžete přepsat. Viz Přepsání výchozího povolení 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. Podívejte se, jak Azure Databricks spravuje kompatibilitu funkcí Delta Lake?

Pomocí následující syntaxe můžete povolit clustering liquid v existující tabulce Delta bez oddílů:

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

Přepsání výchozího 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:

  1. 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);
    
  2. Spuštěním následujícího příkazu povolte clustering liquid v tabulce:

    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řepsání povolení Dopad zákazu na clustering s kapalinou
Vektory odstranění Čtení a zápisy vyžadují Databricks Runtime 12.2 lTS a vyšší. 'delta.enableDeletionVectors' = false Souběžnost na úrovniřádkůch řádků je zakázaná, takže transakce a operace clusteringu budou pravděpodobně kolid Viz Konflikty zápisu se souběžností na úrovni řádků.

DELETE, MERGEa 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ůch řádků je zakázaná, takže transakce a operace clusteringu budou pravděpodobně kolid Viz Konflikty zápisu se souběžností 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í clusteringu kapalin.

Volba klíčů clusteringu

Databricks doporučuje zvolit klíče clusteringu na základě běžně používaných filtrů dotazů. Klíče clusteringu je možné definovat v libovolném pořadí. Pokud jsou dva sloupce korelované, stačí přidat jeden z nich jako klíč clusteringu.

Jako klíče clusteringu můžete zadat až 4 sloupce. Můžete zadat pouze sloupce se statistikami shromážděnými pro 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šší)
  • String
  • Celé číslo
  • Dlouhé celé číslo
  • Krátké
  • Float
  • Hodnota s dvojitou přesností
  • Desetinné číslo
  • Byte
  • Logická hodnota

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 sloupce oddílů jako klíče clusteringu.
Indexování pořadí vykreslování ZORDER BY Použijte sloupce jako klíče clusteringu.
Dělení ve stylu Hive a pořadí Z 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 tabulek protokolu zápisu Delta používané clusteringem liquid. V Azure Databricks musíte použít Databricks Runtime 13.3 LTS a vyšší.

Mezi operace, které cluster na zápisu běží, patří:

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

Zápisy strukturovaného streamování nikdy neaktivují clustering 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
0 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 používají clustering liquid, databricks doporučuje často spuštěné OPTIMIZE , aby se zajistilo, že všechna data jsou efektivně clusterovaná.

Aktivace clusteringu

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;

Clustering liquid je přírůstkový, což znamená, že data se přepíšou jenom podle potřeby, aby vyhovovala datům, která je potř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 do dat clusteru. 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 clustering liquid je přírůstkový, většina OPTIMIZE úloh pro clusterované tabulky běží rychle.

Č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 tak, aby NONE nepřepsala data, která již byla clusterována, ale brání budoucím OPTIMIZE operacím v používání 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;

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. Tabulky můžete číst a zapisovat s kontrolními body v2 v Databricks Runtime 13.3 LTS a vyšší.

Můžete zakázat kontrolní body verze 2 a protokoly tabulek downgrade pro čtení tabulek pomocí clusteringu liquid v Databricks Runtime 12.2 LTS a vyšší. Viz Funkce tabulky Drop Delta.

Omezení

Jsou to následující omezení:

  • V Databricks Runtime 15.1 a níže nepodporuje clustering při zápisu zdrojové dotazy, které zahrnují filtry, spojení nebo agregace.
  • Úlohy strukturovaného streamování nepodporují clustering při zápisu.
  • Tabulku s povoleným clusteringem liquid nelze vytvořit pomocí zápisu strukturovaného streamování. Strukturované streamování můžete použít k zápisu dat do existující tabulky s povoleným clusteringem liquid.