Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
-
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é.
- Seskupování do bloků: Vybrané soubory jsou seskupeny do bloků tak, aby se dosáhlo optimální velikosti výstupního souboru.
- 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).
- Zápis souborů: Přerozdělená data se zapisují do nových souborů s úzkými rozsahy hodnot ve sloupcích pro clustering.
- 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í
OPTIMIZEpo 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
WHEREklauzulí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 BYnemá žá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) DateTypeTimestampTypeTimestampNTZTypeStringType
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: Pokudspark.microsoft.delta.clusteredTable.complexTypes.enabledje tato možnost povolená, a všechna pole typu list jsou sama o sobě způsobilými typy. -
ArrayType: je-lispark.microsoft.delta.clusteredTable.complexTypes.enabledpovolena, a typ prvku je způsobilý. -
MapType: když je povolenospark.microsoft.delta.clusteredTable.complexTypes.enableda typ klíče i typ hodnoty lze řadit a jsou podporované.
Nemáte nárok:
BinaryTypeBooleanTypeNullType
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
OPTIMIZEpo 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íOPTIMIZEpř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 FULLstří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.