Zdieľať cez


Zhlukovanie dát v Fabric Data Warehouse

Vzťahuje sa na:✅ Warehouse v službe Microsoft Fabric

Zhlukovanie dát je technika používaná na organizovanie a ukladanie dát na základe podobnosti. Zhlukovanie dát zlepšuje výkon dotazov a znižuje náklady na výpočty a prístup k úložisku pre dotazy tým, že zoskupuje podobné záznamy dokopy.

Ako to funguje

Dátové zhlukovanie funguje tak, že sa riadky s podobnými hodnotami ukladajú na susedných miestach na úložisku počas príjmu. Zhlukovanie dát využíva krivku vyplňujúcu priestor na organizáciu dát tak, aby sa zachovala lokalita naprieč viacerými rozmermi, čo znamená, že riadky s podobnými hodnotami naprieč zoskupením stĺpcov sú fyzicky blízko seba. Tento prístup výrazne zlepšuje výkon dotazov tým, že preskakuje súbory a znižuje počet skenovaných súborov.

Na rozdiel od konvenčného lexikografického usporiadania používa zoskupovanie dát sofistikovaný algoritmus na prijímanie, pričom riadky s podobnými hodnotami stĺpcov sú blízko seba, aj keď je tabuľka zoskupená viacerými stĺpcami. To robí dátové zhlukovanie ideálnym pre dotazy na rozsah, filtre s vysokou kardinálnosťou a veľké tabuľky s naklonenými rozdeleniami, čo vedie k rýchlejšiemu čítaniu, zníženému I/O a efektívnejšiemu využívaniu zdrojov.

Tu je zjednodušená konceptuálna ilustrácia zhlukovania dát:

Diagram ilustrujúci koncept dátového zhlukovania v dátovom sklade.

V tomto diagrame tabuľka označená Source data zobrazuje riadky zmiešané a zvýraznené rôznymi farbami, aby reprezentovali zoskupenia zoskupení na cieľovom mieste. Usporiadaná tabuľka je rozdelená na tri segmenty súboru, pričom každý zoskupuje riadky podobnými farbami, čo ukazuje, ako zhlukovanie organizuje dáta do optimalizovaných úložiskových segmentov na základe hodnôt stĺpcov.

Metadáta zhlukovania dát sú vložené do manifestu počas prijímania, čo umožňuje skladovému enginu robiť inteligentné rozhodnutia o tom, ku ktorým súborom pristupovať počas používateľských dotazov. Tieto metadáta v kombinácii so spôsobom, akým sú riadky s podobnými hodnotami uložené spolu, zabezpečujú, že dotazy s filtrom predikátov môžu preskočiť celé súbory a skupiny riadkov, ktoré spadajú mimo rozsah predikátov. Napríklad: ak dotaz cieli len na 10% dát tabuľky, zhlukovanie zabezpečuje, že sa prehľadávajú len súbory, ktoré obsahujú dáta v rozsahu filtra, čím sa znižuje I/O a výpočtová spotreba. Väčšie tabuľky viac profitujú z dátového zhlukovania, pretože výhody preskakovania súborov sa zvyšujú s objemom dát.

Kedy použiť dátové zhlukovanie

Pri rozhodovaní, či môže byť dátové zhlukovanie prospešné, preskúmajte vzory dotazov a charakteristiky tabuliek v sklade. Zhlukovanie dát je najefektívnejšie, keď dotazy opakovane filtrujú na konkrétne stĺpce a keď sú základné tabuľky veľké a obsahujú údaje so strednou až vysokou kardinalitou. Medzi bežné scenáre patria:

  • Opakované dotazy s WHERE filtrami: Ak pracovná záťaž zahŕňa časté dotazy filtrujúce konkrétne stĺpce, dátové zhlukovanie zabezpečuje, že počas čítaných dotazov sa prehľadávajú len relevantné súbory. To platí aj vtedy, keď sa filtre opakovane používajú v dashboardoch, reportoch alebo plánovaných úlohách a tlačia sa do skladového enginu ako SQL príkazy.
  • Väčšie tabuľky: zhlukovanie dát je najefektívnejšie, keď sa aplikuje na veľké tabuľky, kde je skenovanie celého datasetu nákladné. Organizovaním riadkov pomocou dátového zhlukovania môže skladový engine preskočiť celé súbory a skupiny riadkov, ktoré nezodpovedajú filtru dotazov, čo môže znížiť využitie I/O a výpočtovej kapacity.
  • Stĺpce so strednou až vysokou kardinalitou: stĺpce s vyššou kardinalitou (napríklad stĺpce s viacerými odlišnými hodnotami, ako je ID alebo dátum) profitujú z dátového zhlukovania, pretože umožňujú enginu izolovať a lokalizovať podobné hodnoty. To umožňuje efektívne preskakovanie súborov, najmä pri selektívnych dotazoch. Stĺpce s nízkou kardinálnosťou (napríklad: pohlavie, región) majú svoje hodnoty rozložené do viacerých súborov, čo ponúka obmedzené možnosti preskakovania súborov.
  • Selektívne dotazy s úzkym záberom: keď dotazy zvyčajne cielia na malú podmnožinu dát a sú kombinované s filtrom WHERE, zhlukovanie dát zabezpečuje, že sa čítajú len súbory obsahujúce príslušné riadky.

Zhlukovanie dát prebieha automaticky počas príjmu dát, bez ohľadu na to, ako boli riadky prijaté. Po prijatí dát nie sú potrebné žiadne používateľské operácie na aplikáciu dátového klastrovania.

ZHLUK PODĽA syntaxe

Zhlukovanie dát je definované počas tvorby tabuliek pomocou klauzuly CLUSTER BY . Syntax je nasledovná:

CREATE TABLE (Transact-SQL) syntax:

CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
 [ ,... n ] –- Column list
) WITH (CLUSTER BY [ ,... n ]);

VYTVORIŤ TABUĽKU AKO VYBRAŤ (Transact-SQL) SYNTAX:

CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name }
( { <column_definition> } [ ,... n ] )
WITH (CLUSTER BY [ ,... n ])
AS <select_statement>;

Klauzula CLUSTER BY vyžaduje špecifikovať aspoň jeden stĺpec pre zhlukovanie dát a maximálne štyri stĺpce.

Vytvorenie tabuľky, ktorá používa dátové klastrovanie s nepodporuje SELECT INTO .

Podpora dátových typov

Nasledujúca tabuľka zhrňuje typy stĺpcov, ktoré možno použiť v klauzule CLUSTER BY :

Kategória Typ údajov Podporované zhlukovanie dát
Presné numeriky bit No
Presné numeriky bigint, int, smallint, desatinné číslo2, číselné Yes
Približné numeriky Plávaj,skutočný Yes
Dátum a čas rande, rande2, čas Yes
Znakové reťazce1 Char Yes
Znakové reťazce1 varchar Yes
Typy LOB varchar(max), varbinary(max) No
Binárne reťazce varbinárny, uniqueidentifier No

1 Pre typy reťazcov (char/varchar) sa pri vytváraní štatistík v stĺpci používajú iba prvých 32 znakov. V dôsledku toho môžu mať stĺpce s hodnotami obsahujúcimi dlhé prefixy obmedzené výhody pri zhlukovaní dát.

2 Pre desatinné typy s presnosťou väčšou ako 18 sa predikáty počas vykonávania dotazu neukladajú do úložiska. Ak používate desatinné typy s dátovým zhlukovaním, uprednostnite stĺpce s menšou presnosťou.

Stĺpce s nepodporovanými dátovými typmi môžu stále existovať v tabuľke, ktorá používa dátové zhlukovanie, ale nemôžu byť použité s CLUSTER BY.

Najlepšie postupy pri zhlukovaní dát

Zhlukovanie dát je efektívnejšie, keď sa zhlukovacie stĺpce vyberajú na základe skutočných vzorov dotazov, najmä tých so strednou až vysokou kardinalitou a keď sa počas dotazov používajú predikáty rozsahu.

Zvážte nasledujúce osvedčené postupy pri používaní dátového zhlukovania:

  • Zhlukovanie dát je efektívnejšie pri veľkých tabuľkách.
  • Kedykoľvek je to možné, dávkové prijímanie a aktualizácie spracovávajú väčší počet riadkov naraz, namiesto použitia menších úloh. Pre optimálny výkon by DML operácie mali mať aspoň 1 milión riadkov, aby mohli profitovať z dátového zhlukovania. Po po sebe idúcich vloženiach, aktualizáciách a vymazaniach môže kompaktácia dát konsolidovať riadky z menších súborov do optimálne veľkých.
  • Na zhlukovanie dát vyberajte stĺpce so strednou až vysokou kardinalitou, pretože vďaka odlišnému rozdeleniu hodnôt prinášajú lepšie výsledky. Stĺpce s nízkou kardinalitou môžu ponúkať obmedzené možnosti na prerezávanie súborov.
  • Vyberte stĺpce na základe častého používania WHERE predikátov v dashboardoch, reportoch, plánovaných úlohách alebo používateľských dotazoch. Podmienky spojenia rovnosti neprofitujú z dátového zhlukovania. Pre prehľad o tom, ako použiť Query Insights na výber stĺpcov pre zhlukovanie dát na základe vašej aktuálnej záťaže, pozrite si Návod: Použitie dátového zhlukovania v Fabric Data Warehouse.
  • Nepoužívajte zhlukovanie dát vo väčšom množstve, než je nevyhnutné. Viacstĺpcové zhlukovanie pridáva zložitosť do úložiska, zvyšuje režijné náklady a nemusí ponúknuť výhody, pokiaľ sa všetky stĺpce nepoužívajú spolu v dotazoch s predikátmi.
  • Poradie stĺpcov použité v nie CLUSTER BY je dôležité a nemení spôsob, akým sa riadky ukladajú.
  • Pri vytváraní tabuľky s dátovým zhlukovaním pomocou CREATE TABLE AS SELECT (CTAS) alebo pri prijímaní dát s INSERT INTO ... SELECT, udržujte vybranú časť týchto príkazov čo najjednoduchšiu pre optimálnu kvalitu zhlukovania dát.

Zhlukovanie dát môže výrazne znížiť náklady počas dotazov, ak je dobre zosúladené s predikátami dotazov. Avšak príjem dát znamená viac časových a kapacitných jednotiek (CU) na tabuľke, ktorá používa zhlukovanie dát, v porovnaní s ekvivalentnou tabuľkou s rovnakými údajmi bez zhlukovania dát. Stáva sa to preto, že skladový engine potrebuje objednať dáta počas prijímania. Keďže dáta, ktoré sa prijímajú, sa čítajú viackrát, dátové zhlukovanie môže znížiť celkovú výpočtovú spotrebu daného pracovného zaťaženia.

Systémové zobrazenia

Metadáta zhlukovania dát je možné dotazovať pomocou sys.index_columns. Zobrazuje všetky stĺpce použité pri zoskupovaní dát, vrátane stĺpcového ordinálu použitého v klauzule CLUSTER BY .

Nasledujúci dotaz uvádza všetky stĺpce použité v dátovom zhlukovaní v aktuálnom sklade a ich tabuľky:

SELECT
    t.name AS table_name,
    c.name AS column_name,
    ic.data_clustering_ordinal AS clustering_ordinal
FROM sys.tables t
JOIN sys.columns c
    ON t.object_id = c.object_id
JOIN sys.index_columns ic
    ON c.object_id = ic.object_id
   AND c.column_id = ic.column_id
WHERE ic.data_clustering_ordinal > 0
ORDER BY
    t.name,
    ic.data_clustering_ordinal;

Note

Stĺpcový ordinál je zobrazený len ako poradie, ktoré sa použilo pri CLUSTER BY definovaní tabuľky. Ako je uvedené v Najlepších postupoch, poradie stĺpcov neovplyvňuje výkon.

Obmedzenia a poznámky

  • Výkon príjmu dát sa môže zhoršiť, ak tabuľky obsahujú veľké varchar stĺpce s veľmi variabilnou veľkosťou dát.
    • Napríklad zvážme tabuľku s varchar(200) stĺpcom: ak niektoré riadky obsahujú len niekoľko znakov, zatiaľ čo iné sa blížia k maximálnej dĺžke, významná variabilita vo veľkosti dát môže negatívne ovplyvniť rýchlosť prijímania.
    • Tento problém je známy a bude riešený v pripravovanom vydaní.
  • IDENTITY stĺpce sa nedajú použiť s CLUSTER BY. Tabuľky obsahujúce IDENTITY stĺpec môžu byť stále použité na zhlukovanie dát, za predpokladu, že používa rôzne stĺpce s CLUSTER BY.
  • Zhlukovanie dát musí byť definované pri vytváraní tabuľky. Premena bežného stola na taký s ním CLUSTER BY nie je podporovaná. Podobne nie je povolené meniť stĺpce zhlukovania po vytvorení tabuľky. Ak sú potrebné rôzne stĺpce zhlukovania, voliteľne použite CREATE TABLE AS SELECT (CTAS) na vytvorenie novej tabuľky s požadovanými stĺpcami zhlukovania.
  • V niektorých prípadoch môže byť dátové zhlukovanie aplikované asynchrónne. V takýchto prípadoch sa dáta reorganizujú pomocou úlohy na pozadí a tabuľka nemusí byť po dokončení príjmu úplne optimalizovaná. To sa môže stať za nasledujúcich podmienok:
    • Pri použití INSERT INTO ... SELECT alebo CREATE TABLE AS SELECT (CTAS) a triedenie zdrojových a cieľových tabuliek sa líši.
    • Pri prijímaní z externých dát v komprimovanom CSV formáte.
    • Keď má príkaz na príjem menej ako 1 milión riadkov.
  • Príjem dát do dátových klastrovacích tabuliek predstavuje režijné náklady v porovnaní s tabuľkou s rovnakou schémou, ktorá nepoužíva dátové zhlukovanie. Toto sa deje kvôli dodatočnej výpočtovej kapacite potrebnej na optimalizáciu úložiska. Ak má stĺpec zhlukovania koláciu necitlivú na veľkosť písmen, očakáva sa aj väčšia režijná záťaž.
  • Zhlukovanie dát môže zlepšiť čas odozvy dotazu, spotrebu kapacitných jednotiek (CU) alebo oboje.

Príklady

Odpoveď: Vytvorte zoskupenú tabuľku pre predajné údaje

Tento príklad vytvára jednoduchú Sales tabuľku a používa stĺpce CustomerID a SaleDate na zhlukovanie dát.

CREATE TABLE Sales (
    SaleID INT,
    CustomerID INT,
    SaleDate DATE,
    Amount DECIMAL(10,2)
) WITH (CLUSTER BY (CustomerID, SaleDate))

B. Vytvorte zoskupenú tabuľku pomocou CREATE TABLE AS SELECT

Tento príklad sa používa CREATE TABLE AS SELECT na vytvorenie kópie existujúcej Sales tabuľky spolu so CLUSTER BY stĺpcom SaleDate .

CREATE TABLE Sales_CTAS 
WITH (CLUSTER BY (SaleDate)) 
AS SELECT * FROM Sales

C. Zobraziť stĺpce používané pre dátové zhlukovanie v danej tabuľke

Tento príklad uvádza stĺpce používané na zhlukovanie dát v tabuľke Sales .

SELECT
    c.name AS column_name,
    ic.data_clustering_ordinal AS clustering_ordinal
FROM sys.tables t
JOIN sys.columns c
    ON t.object_id = c.object_id
JOIN sys.index_columns ic
    ON c.object_id = ic.object_id
   AND c.column_id = ic.column_id
WHERE 
    ic.data_clustering_ordinal > 0
   AND t.name = 'Sales'
ORDER BY
    t.name,
    ic.data_clustering_ordinal;

Výsledky:

Tabuľka zobrazujúca zhlukovacie stĺpce a ich ordinálne pozície. Prvý riadok uvádza CustomerID s klastrovacím ordinálom 1. Druhý riadok uvádza SaleDate s klastrovacím ordinálom 2.

D. Skontrolujte efektívnosť výberu stĺpcov pre zhlukovanie dát

Query Insights môže pomôcť vyhodnotiť vplyv zhlukovania dát na vašu záťaž porovnaním času CPU a dát prehľadaných medzi daným dotazom a jeho ekvivalentom na zhlukovanej kópii pôvodnej tabuľky. Nasledujúci príklad ilustruje, ako získať pridelený čas CPU a objem dát prehľadaných na disku, pamäti a vzdialenom úložisku pre konkrétny dotaz.

SELECT 
    allocated_cpu_time_ms, 
    data_scanned_disk_mb, 
    data_scanned_memory_mb, 
    data_scanned_remote_storage_mb
FROM 
    queryinsights.exec_requests_history 
WHERE 
     distributed_statement_id = '<Query_Statement_ID>'

Kde <Query_Statement_ID> je ID distribuovaného príkazu dotazu, ktorý chcete vyhodnotiť.

Ďalší krok