Použijte liquid clustering u tabulek Delta

Clustering Liquid je flexibilní strategie rozložení dat pro tabulky Delta v Microsoft Fabric. Nahrazuje statické particionování ve stylu Hive a ruční údržbu Z-Order deklarativním clusteringem, který usnadňuje změny. Definujete, které sloupce se mají seskupit, a modul Fabric Spark Runtime zpracuje rozložení fyzických dat automaticky.

Tento článek použijte k:

  • Porozumíte tomu, jak funguje shlukování kapalin a kdy ho používat.
  • Porovnejte liquid clustering s partitioningem a Z-Order.
  • Nakonfigurujte clustering v tabulkách.
  • Principy přírůstkového kapalinového shlukování (Runtime 2.0+).
  • Zhodnoťte kvalitu shlukování.
  • Vylaďte chování seskupování pomocí konfigurace relace.

Co je shlukování kapalin?

Liquid clustering organizuje data v souborech tabulek Delta tak, aby byly řádky s podobnými hodnotami ve shlukovacích sloupcích umístěny společně. Rozložení umožňuje rozšířené přeskočení souborů během provádění dotazů: když se dotaz filtruje na sloupce clusteringu, modul přečte pouze soubory, jejichž rozsahy hodnot odpovídají predikátu, a přeskočí zbytek.

Na rozdíl od dělení na oddíly Liquid Clustering:

  • Nevytváří fyzické adresářové struktury pro každou hodnotu sloupce.
  • Nevyžaduje, abyste při vytváření tabulky zvolili clusteringové sloupce (později je můžete změnit).
  • Pracuje se sloupci s vysokou kardinalitou, aniž by docházelo k možným problémům způsobeným tisíci malých particí.
  • Použije optimalizaci rozložení během OPTIMIZE, ne v době zápisu.

Výhody oproti particionování a Z-Order

Liquid clustering nabízí oproti dělení ve stylu Hive i Z-Order významné výhody z hlediska flexibility, údržby a práce s vyvíjejícími se datovými vzory.

Porovnání s dělením ve stylu Hive

Aspect Dělení ve stylu Hive Shlukování kapalin
Granulace Jeden adresář pro každou jedinečnou hodnotu (nebo kombinaci) Rozsahy hodnot na úrovni souboru, žádné adresáře
Vysoká kardinalita Vytvoří tisíce malých souborů nebo adresářů. Přirozeně si poradí s daty; ukládá je do souborů optimální velikosti
Změny sloupců Vyžaduje přepsání celé tabulky. ALTER TABLE ... CLUSTER BY se použije na další OPTIMIZE
Cesta zápisu Sloupec pro dělení do oddílů musí být znám při zápisu. Libovolný sloupec lze dodatečně zařadit do clusteru.
Problém s malým souborem Běžné při streamování nebo častém vkládání Spravováno OPTIMIZE komprimováním

Ve srovnání se Z-Order

Aspect Z-Order Shlukování kapalin
Změny sloupců Je nutné znovu spustit OPTIMIZE ZORDER BY (...) s novými sloupci. ALTER TABLE ... CLUSTER BY zachová definici.
Přírůstková podpora Žádný přírůstkový režim; použití WHERE k ručnímu omezení rozsahu Přírůstkový režim (Runtime 2.0+) zpracovává pouze nové, změněné nebo poškozené soubory automaticky.
Metadata Žádná trvalá definice sloupce Sloupce clusteringu uložené v metadatech tabulky
Rozložení s více sloupci Křivka Z-order použitá při optimalizaci Z-uspořádání pro jeden shlukovací sloupec; Hilbertova křivka pro 2 a více sloupců, zajišťující optimalizovanou lokalitu dat

Liquid clustering využívá pro jednosloupcová rozložení Z-order a pro rozložení se dvěma a více sloupci Hilbertovu křivku, což je vylepšení oproti Z-Order, které pro vícerozměrné shlukování používá pouze křivku Z-order. Clustering Liquid zabalí oba algoritmy do přírůstkové architektury s podporou metadat, která snižuje průběžné náklady na údržbu.

Vytvoření tabulky s kapalinou v clusteru

Definujte sloupce clusteringu CLUSTER BY pomocí klauzule při vytváření tabulky:

-- Create a new clustered table
CREATE TABLE dbo.sales (
    order_id BIGINT,
    order_date DATE,
    region STRING,
    amount DECIMAL(10,2)
) CLUSTER BY (order_date, region);

-- Create from query results
CREATE TABLE dbo.sales_clustered
CLUSTER BY (order_date, region)
AS SELECT * FROM raw_sales;

-- Enable on existing table
ALTER TABLE dbo.sales_txn CLUSTER BY (order_date, region);

Změna sloupců clusteringu

Na rozdíl od dělení můžete sloupce clusteringu kdykoli změnit bez přepsání dat:

-- Change clustering columns
ALTER TABLE sales CLUSTER BY (region, product_category);

-- Remove clustering (table becomes unclustered)
ALTER TABLE sales CLUSTER BY NONE;

Po změně sloupců clusteringu se nové uspořádání projeví při příštím spuštění OPTIMIZE. Existující soubory si zachovají předchozí rozložení, dokud nebudou překluzovány.

Použijte shlukování pomocí OPTIMIZE

Shlukování se použije během příkazu OPTIMIZE. V příkazu není nutné zadávat sloupce OPTIMIZE , protože definice clusteringu je uložená v metadatech tabulky:

-- Cluster the table using the defined clustering columns
OPTIMIZE sales;

-- Recluster partial Z-Cubes and Z-Cubes with different clustering keys or clustering providers
OPTIMIZE sales FULL;

Používá se OPTIMIZE FULL při změně klíčů clusteringu a chcete znovu sestavit datové krychle Z, které nevyhovují aktuální strategii clusteringu. Z-Cube je logická jednotka, kterou liquid clustering používá k seskupování souborů, které sdílejí stejné sloupce clusteringu. Data se seskupují do jedné datové krychle Z, dokud se klíče clusteru nezmění nebo množství dat překročí 100 GB.

Tip

Od verze Fabric Runtime 2.0 podporuje Native execution engine provádění OPTIMIZE v liquid clustered tabulkách a přináší o 30–50 % vyšší výkon vícerozměrného clusterování. Starší verze modulu runtime používají běžné neakcelerované spouštění Sparku.

Jak funguje shlukování kapalin

Při spuštění OPTIMIZE v tabulce s kapalinou v clusteru dojde k následujícímu:

  1. Výběr souboru: Modul vybere soubory, které potřebují clustering.
    • V modulu Runtime 2.0+ (strategie přírůstkového clusteringu) jsou vybrány pouze neclusterované, poškozené, malé nebo odstraněné vektorové soubory.
    • V Runtime 1.3 jsou vybrány všechny soubory v každé Z-Cube menší než 100 GB bez ohledu na to, zda už jsou dobře seskupené.
  2. Seskupování do bloků: Vybrané soubory jsou seskupeny do bloků tak, aby se dosáhlo optimální velikosti výstupního souboru.
  3. Repartitioning: Data v rámci každé přihrádky se předělují pomocí křivky vyplnění mezery (Hilbertova křivka pro vícesloupcový, pořadí Z pro jeden sloupec).
  4. Zápis souborů: Přerozdělená data se zapisují do nových souborů s úzkými rozsahy hodnot ve sloupcích pro clustering.
  5. Aktualizace metadat: Protokol Delta zaznamenává nahrazení souboru a označování nových souborů pomocí metadat clusteringu.

Výsledkem jsou soubory s nepřekrývajícími se (nebo jen minimálně se překrývajícími) rozsahy hodnot v clusterovacích sloupcích, což stroji umožňuje přeskočit soubory, které neodpovídají podmínkám dotazu.

Caution

Fabric Runtime 1.3 (Delta 3.2): Používejte s opatrností shlukování kapalin. V tomto běhovém prostředí používá liquid clustering úplnou strategii přepisování Z-Cube — při každém běhu se přepíše každý soubor v rámci Z-Cube. Datová krychle Z se zachová (přeskočí) pouze v případech, kdy jeho velikost překročí 100 GB. U tabulek menších než 100 GB úplné přepsání znamená, že každé spuštění přepíše všechna OPTIMIZE data tabulky, i když jsou data již dobře clusterovaná. To způsobuje výraznou amplifikaci zápisu.

  • Nepoužívejte automatické zhušťování s clusteringem Liquid v prostředí Runtime 1.3. Každá aktivační událost automatického komprimace může způsobit přepsání celé tabulky místo clusterování nových nebo změněných dat.
  • Vyhněte se spuštění OPTIMIZE po každé operaci zápisu. V modulu runtime 1.3 omezte clustering na strategická, úmyslná spuštění a přijměte mezi nimi nižší aktuálnost clusteringu.

Přírůstkové shlukování kapalin, které eliminuje toto zesílení zápisu, je dostupné pouze od Fabric Runtime 2.0.

Přírůstkové shlukování kapalin

Od verze Fabric Runtime 2.0 (Delta 4.1) používá kapalinové clusterování ve výchozím nastavení inkrementální strategii clusterování. Přírůstková strategie je významným vylepšením oproti standardnímu chování clusteringu.

Important

Přírůstkové shlukování kapalin je k dispozici pouze ve verzi Fabric Runtime 2.0 a novější. V dřívějších běhových prostředích používá OPTIMIZE standardní chování (úplné přepisování), při kterém se při každém spuštění přepíší všechny soubory v Z-Cube.

Proč je důležitá strategie přírůstkového clusteringu

Standardní algoritmus clusteringu přepíše všechny soubory v datové krychli Z (až 100 GB) při každém OPTIMIZE spuštění bez ohledu na to, jestli už jsou dobře clusterované. U tabulky, do níž se přidávají malé objemy dat, rostou náklady na clusterování lineárně s velikostí tabulky, nikoli s množstvím nových dat.

Přírůstkový režim řeší problém s úplným přepsáním výběrem pouze souborů, které skutečně potřebují clustering:

  • Neclusterované soubory: Nově zapsaná data bez metadat clusteringu
  • Malé soubory: Soubory pod prahovou hodnotou cílové velikosti souboru
  • Soubory s vektory odstranění: Soubory s kumulovanými odstraněními překračující prahovou hodnotu vyčištění

Již dobře seskupené soubory vhodné velikosti budou zcela přeskočeny.

Automatické reklastrování

Inkrementální shlukování tekutin zahrnuje automatickou detekci překryvů, označovanou jako automatické přeshlukování, která slouží k udržení kvality shlukování v průběhu času. Jak přicházejí nová data, může mezi rozsahy hodnot v souborech vznikat překryv, což snižuje efektivitu vynechávání dat. Automatické překluzování detekuje překrývající se rozsahy hodnot napříč soubory a selektivně překluzuje pouze ovlivněné soubory.

Automatické přeskupování clusterů se spouští automaticky v rámci OPTIMIZE, kdykoli jsou k dispozici nová nebo změněná data určená k seskupení. Nejsou vyžadovány žádné ruční zásahy ani naplánovaná úplná reklastrování. Strategie přírůstkového clusteringu udržuje téměř optimální kvalitu clusteringu při vývoji dat.

Návrat k úplnému chování při přepsání

Pokud potřebujete zakázat strategii přírůstkového clusteringu a použít úplné chování při přepsání, nastavte následující konfiguraci:

SET spark.microsoft.delta.optimize.clustering.strategy.incremental = FALSE;

OPTIMIZE sales;

Alternativně použijte OPTIMIZE FULL pro jednorázové úplné opětovné shlukování, aniž byste změnili nastavení relace:

OPTIMIZE sales FULL;

Note

Strategie přírůstkového clusteringu záměrně umožňuje menší odchylku od teoreticky optimálního rozložení, aby se dosáhlo významného snížení amplifikace zápisu. Spuštění OPTIMIZE FULL odstraňuje tento rozdíl tím, že zcela přebuduje Z-Cubes do teoreticky optimálního stavu, ale za cenu vyšších nákladů na zápis.

Vyhodnoťte kvalitu shlukování

Začněte s Fabric Runtime 2.0 a použijte metodu Scala clusteringQuality() k vyhodnocení fyzického uspořádání tabulky Delta s kapalnými shluky. Metoda vrací DataFrame s jedním řádkem pro každý sloupec seskupení.

Important

Tato clusteringQuality() metoda není dostupná v Fabric Runtime před verzí 2.0.

import io.delta.tables.DeltaTable

val deltaTable = DeltaTable.forName(spark, "dbo.clustered_table")
val quality_df = deltaTable.clusteringQuality()
display(quality_df)

Výsledek obsahuje následující metriky:

Metric Description Preferovaný směr
column_name Sloupec shlukování vyhodnocený metodou. Nelze použít.
status Stav hodnocení. ok To znamená, že byly vypočítány metriky. no_stats znamená, že sloupec nemá použitelné statistiky souboru. ok.
num_files Celkový počet souborů ve snímku tabulky. Nelze použít.
num_files_with_stats Počet souborů s použitelnými statistikami pro daný sloupec. Soubory bez statistik nelze přeskočit přes přeskočení souborů. Blízko num_files.
avg_coverage_pct Průměrné procento hodnotového rozsahu sloupce pokrytého každým souborem. Nižší hodnoty jsou lepší.
avg_depth Průměrný počet souborů, kterých se dotaz dotkne. 1.0 je ideální.
max_depth Maximální počet souborů, které dotaz dotkne. Nižší hodnoty jsou lepší.
overlap_ratio Normalizovaný překryv mezi rozsahy hodnot v souboru. 0 znamená žádné překryvy a je ideální.
skipping_effectiveness Odhadovaný podíl souborů, které může bodový dotaz přeskočit. 1 To znamená, že 100% všech neshodných souborů lze přeskočit. S rostoucím počtem vybraných shlukovacích sloupců se maximální možné skipping_effectiveness snižuje.

Porovnejte tyto metriky před a po OPTIMIZE , abyste zjistili, zda shlukování zlepšilo rozložení. Výsledky interpretujte pomocí rozložení dat tabulky a dotazovacích predikátů. Metriky odhadují potenciál přeskakování souborů na základě statistik souboru; Neměří výkon konkrétního dotazu.

Referenční informace ke konfiguraci

Následující konfigurace relace určují chování liquid clusteringu v Fabric Runtime 2.0+.

Inkrementální shlukování

Konfigurace Typ Default Description
spark.microsoft.delta.optimize.clustering.strategy.incremental logický true Hlavní přepínač pro inkrementální shlukování Pokud true, OPTIMIZE zpracovává pouze neseskupené, nezdravé, malé soubory a soubory vektorů odstranění. Pokud false, všechny soubory pro Z-Cubes menší než 100 GB budou přepsány (standardní chování).
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster logický true Umožňuje automatickou detekci a opětovné seskupování souborů s překrývajícími se datovými rozsahy. Platí pouze při povolení přírůstkového clusteringu.

Automatické ladění přeskupení clusterů

Tyto konfigurace určují citlivost a rozsah automatického přeskupování do clusterů. Výchozí hodnoty jsou vhodné pro většinu úloh. Upravte je pouze v případě, že potřebujete změnit kompromis mezi kvalitou clusteringu a zesílením zápisu.

Konfigurace Typ Default Description
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOffendingFiles Celé číslo 4 Minimální počet překrývajících se souborů potřebný ke spuštění opětovného shlukování. Při nižších hodnotách dochází k přeskupení dříve (lepší výkon dotazů, vyšší náklady na zápis). Musí být ≥ 2.
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOverlapThreshold Double 0.75 Prahová hodnota skóre překryvu dimenze shlukování. Páry souborů, které bodují nad touto hodnotou, se považují za překrývající se. Musí být v rozsahu (0,25, 1,0]. Nižší hodnoty jsou agresivnější.

Výběr sloupců clusteringu

Nejlepších výsledků dosáhnete výběrem sloupců clusteringu na základě nejběžnějších vzorů filtru dotazů:

  • Vyberte 1 až 4 sloupce , které se často zobrazují v WHERE klauzulích. Více sloupců snižuje účinnost vynechávání souborů na úrovni jednotlivých sloupců u prostorově vyplňující křivky a prodlužuje dobu potřebnou ke shlukování dat.
  • Zvažte kardinalitu sloupců. Sloupce s nízkou kardinalitou vytvářejí méně jedinečných rozsahů hodnot, což snižuje výhodu vynechání souborů v kombinaci s klíči clusteringu s vysokou kardinalitou.
  • Pořadí sloupců nemá žádný vliv na clustering. Pořadí sloupců zadaných po CLUSTER BY nemá žádný vliv na výsledné multidimenzionální shlukování.

Podporované typy sloupců

Ne všechny typy sloupců se dají použít jako klíče clusteringu. Modul vyhodnocuje datový typ jednotlivých sloupců a určí způsobilost.

Vždy způsobilé (atomické typy):

  • NumericType(ByteType, , ShortTypeIntegerType, LongTypeFloatType, , DoubleTypeDecimalType)
  • DateType
  • TimestampType
  • TimestampNTZType
  • StringType

Podmíněně způsobilý:

Note

Následující typy je možné povolit spuštěním Fabric Spark Runtime 2.0 (Delta 4.1).

  • StructType: Pokud spark.microsoft.delta.clusteredTable.complexTypes.enabled je tato možnost povolená, a všechna pole typu list jsou sama o sobě způsobilými typy.
  • ArrayType: je-li spark.microsoft.delta.clusteredTable.complexTypes.enabled povolena, a typ prvku je způsobilý.
  • MapType: když je povoleno spark.microsoft.delta.clusteredTable.complexTypes.enabled a typ klíče i typ hodnoty lze řadit a jsou podporované.

Nemáte nárok:

  • BinaryType
  • BooleanType
  • NullType

Ekvivalentní způsobilé typy používané ve statistikách na úrovni souboru najdete v tématu Přeskočení souboru – způsobilé datové typy.

Interakce s dalšími funkcemi

funkce Chování
Rozdělení Nekompatibilní. Pro účely přeskakování souborů se místo partitioningu doporučuje liquid clustering.
Z-Order Nekompatibilní. Pro účely vynechávání souborů se doporučuje použít liquid clustering místo Z-Order.
Rychlá optimalizace Kompatibilní od verze Runtime 2.0. Ve starších verzích runtime nemá rychlá optimalizace žádný vliv na tabulky s clusteringem Liquid. Během OPTIMIZE se shlukování přeskočí, pokud není dostatek malých souborů nebo dat k vytvoření výstupního souboru o vhodné velikosti.
Adaptivní cílová velikost souboru Kompatibilní. Cílová velikost souboru nastavená adaptivním vyhodnocením se používá jako cílová velikost clusteringu.
Optimalizace zápisu Kompatibilní. Vytvoří konsolidované soubory při zápisu, které se pak seskupí během OPTIMIZE.
Automatické zhušťování Nepoužívejte s funkcí Liquid Clustering v prostředí Runtime 1.3 a starším. V těchto běhových prostředích každý spouštěč automatické kompakce přepisuje všechna data v Z-Cubes menších než 100 GB, což způsobuje výrazné zesílení zápisu. Od verze Runtime 2.0 je automatická kompaktace podporována: inkrementální clustering zajišťuje, že se přepisují pouze nové nebo poškozené soubory. Automatická kompaktace zajišťuje konsolidaci malých souborů; OPTIMIZE zajišťuje uspořádání clusteringu.
Vektory odstranění Pro clustering se vyberou soubory překračující prahovou hodnotu odstraněných řádků, a to nezávisle na stavu clusteringu.
V-řád Kompatibilní. V-order a kapalné shlukování fungují na různých osách (vnitřní uspořádání souboru vs. hodnotové rozsahy napříč soubory). Obě je možné použít společně.

Osvědčené postupy

  • Pravidelně spouštějte OPTIMIZE po dávkových zápisech nebo podle plánu pro streamovací tabulky, ale pouze v Runtime 2.0+, kde strategie přírůstkového shlukování zajišťuje, že časté spouštění není nákladné. V prostředí Runtime 1.3 a starších verzích každé spuštění OPTIMIZE přepíše všechna data v Z-Cubes menších než 100 GB, takže spouštění by proto mělo být záměrné a probíhat jen zřídka.
  • Používejte OPTIMIZE FULL střídmě. Ponechte si to na dobu po změně sloupců shlukování nebo když potřebujete jednorázové obnovení kvality.
  • Sledujte kvalitu shlukování pomocí clusteringQuality() a ověřte výsledek pomocí metrik naskenovaných souborů v uživatelském rozhraní Spark nebo v plánech dotazů.
  • Zkombinujte s optimalizací zápisu pro streamovací úlohy, abyste zajistili, že každá mikrodávka vytvoří rozumný počet souborů pro clustering.