Liquid clustering toepassen op Delta-tabellen

Liquid clustering is een flexibele strategie voor gegevensindeling voor Delta-tabellen in Microsoft Fabric. Het vervangt statische Hive-stijl partitionering en handmatig Z-Order onderhoud door declaratieve, wijzigingsvriendelijke clustering. U definieert aan welke kolommen moeten worden geclusterd en de Fabric Spark Runtime verwerkt de indeling van fysieke gegevens automatisch.

Gebruik dit artikel om:

  • Begrijpen hoe liquid clustering werkt en wanneer u deze wilt gebruiken.
  • Vergelijk vloeistofclustering met partitionering en Z-Order.
  • Configureer clustering voor uw tabellen.
  • Meer inzicht in incrementele liquid clustering (Runtime 2.0+).
  • Clusteringgedrag afstemmen met sessieconfiguraties.

Wat is liquid clustering?

Liquid clustering organiseert gegevens in bestanden van Delta-tabellen, zodat rijen met vergelijkbare waarden in de clusteringkolommen bij elkaar worden geplaatst. De indeling maakt verbeterd overslaan van bestanden mogelijk tijdens het uitvoeren van query’s: wanneer een query filtert op clusterkolommen, leest de engine alleen de bestanden waarvan de waardebereiken overeenkomen met het predicaat, en slaat de rest over.

In tegenstelling tot partitioneren, liquide clustering:

  • Maakt geen fysieke mapstructuren per kolomwaarde.
  • U hoeft geen clusterkolommen te kiezen tijdens het maken van tabellen (deze kunnen later worden gewijzigd).
  • Verwerkt kolommen met hoge kardinaliteit zonder potentiële problemen met kleine bestanden te maken van duizenden kleine partities.
  • Past indelingsoptimalisatie toe tijdens OPTIMIZE, niet tijdens schrijftijd.

Voordelen ten opzichte van partitionering en Z-Order

Liquid clustering biedt aanzienlijke voordelen ten opzichte van zowel Hive-stijl partitionering als Z-Order op het gebied van flexibiliteit, onderhoud en verwerking van veranderende gegevenspatronen.

Vergeleken met Partitionering in Hive-stijl

Aspect Partitionering in Hive-stijl Clusteren van vloeistoffen
Granulariteit Eén map per afzonderlijke waarde (of combinatie) Waardebereiken op bestandsniveau, geen mappen
Hoge kardinaliteit Hiermee worden duizenden kleine bestanden/mappen gemaakt Werkt op natuurlijke wijze; slaat gegevens op in bestanden van de juiste grootte
Kolomwijzigingen Vereist herschrijven van volledige tabel ALTER TABLE ... CLUSTER BY is van toepassing op de volgende OPTIMIZE
Schrijfpad Partitiekolom moet bekend zijn bij het schrijven Elke kolom kan achteraf worden geclusterd
Probleem met kleine bestanden Gebruikelijk bij streaming of frequente invoegingen Beheerd door OPTIMIZE compressie

Vergeleken met Z-Order

Aspect Z-Order Clusteren van vloeistoffen
Kolomwijzigingen OPTIMIZE ZORDER BY (...) moet opnieuw worden uitgevoerd met nieuwe kolommen ALTER TABLE ... CLUSTER BY blijft de definitie behouden
Stapsgewijze ondersteuning Geen incrementele modus; gebruiken WHERE om het bereik handmatig te beperken Incrementele modus (Runtime 2.0+) verwerkt alleen automatisch nieuwe, gewijzigde of beschadigde bestanden
Metadata Geen permanente kolomdefinitie Clusteringkolommen die zijn opgeslagen in tabelmetagegevens
Indeling met meerdere kolommen Z-Order-curve toegepast tijdens het optimaliseren Z-Volgorde voor één clusterkolom; Hilbert-curve voor 2+ kolommen, waardoor geoptimaliseerde gegevenslokaliteit wordt geboden

Liquid clustering maakt gebruik van Z-Order voor indelingen met één kolom en de Hilbert-curve voor 2+ kolommen: een verbetering ten opzichte van Z-Order, die alleen de Z-Order-curve voor multidimensionale clustering toepast. Liquid clustering verpakt beide algoritmen in een incrementeel, metagegevensbewust framework dat doorlopende onderhoudskosten vermindert.

Een geclusterde vloeistoftabel maken

Definieer clusteringkolommen met behulp van de clausule CLUSTER BY bij het maken van een tabel:

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

Clusteringkolommen wijzigen

In tegenstelling tot partitionering kunt u op elk gewenst moment clusterkolommen wijzigen zonder gegevens te herschrijven:

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

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

Nadat u de clusterkolommen hebt gewijzigd, is de nieuwe indeling van toepassing op de volgende OPTIMIZE uitvoering. Bestaande bestanden behouden hun eerdere indeling totdat ze zijn geclusterd.

Clustering toepassen met OPTIMIZE

Clustering wordt toegepast tijdens de OPTIMIZE opdracht. U hoeft geen kolommen in de OPTIMIZE instructie op te geven omdat de clusterdefinitie is opgeslagen in metagegevens van de tabel:

-- 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;

Gebruik OPTIMIZE FULL deze methode wanneer u clusteringsleutels wijzigt en Z-Cubes opnieuw wilt opbouwen die niet voldoen aan de huidige clusteringstrategie. Een Z-Kubus is de logische eenheid die liquid clustering gebruikt om bestanden te groeperen die dezelfde clusteringkolommen delen. Gegevens worden geclusterd in één Z-Kubus totdat de clustersleutels veranderen of de hoeveelheid gegevens groter is dan 100 GB.

Tip

Vanaf Fabric Runtime 2.0 biedt de Natieve uitvoeringsengine ondersteuning voor het uitvoeren van OPTIMIZE op geclusterde liquide tabellen, wat 30-50% snellere multidimensionale clusteringprestaties levert. Eerdere runtimes vallen terug op normale niet-vertraagde Spark-uitvoering.

Hoe vloeistofclustering werkt

Wanneer u OPTIMIZE uitvoert op een liquid-geclusterde tabel, gebeurt het volgende:

  1. Bestandsselectie: De engine selecteert bestanden die clustering nodig hebben.
    • In Runtime 2.0+ (incrementele clusteringstrategie) worden alleen niet-geclusterde, beschadigde, kleine of verwijderingsvectorbestanden geselecteerd.
    • In Runtime 1.3 worden alle bestanden binnen elke Z-kubus kleiner dan 100 GB geselecteerd, ongeacht of ze al goed zijn geclusterd.
  2. Bin-verpakking: geselecteerde bestanden worden gegroepeerd in opslaglocaties die gericht zijn op een optimale grootte van het uitvoerbestand.
  3. Opnieuw partitioneren: gegevens binnen elke bin worden opnieuw gepartitioneerd met behulp van een ruimtevullende curve (Hilbert-curve voor meerdere kolommen, Z-Order voor één kolom).
  4. Bestand schrijven: gepartitioneerde gegevens worden geschreven als nieuwe bestanden met krappe waardebereiken op clusterkolommen.
  5. Update van metagegevens: het Delta-logboek registreert de bestandsvervanging, waarbij nieuwe bestanden worden gelabeld met clusteringmetagegevens.

Het resultaat is een set bestanden met niet-overlappende (of minimaal overlappende) waardebereiken op clusterkolommen, waardoor de engine bestanden kan overslaan die niet overeenkomen met queryvoorwaarden.

Caution

Fabric Runtime 1.3 (Delta 3.2): gebruik vloeistofclustering met voorzichtigheid. In deze runtime maakt liquid clustering gebruik van een volledige Z-Cube herschrijfstrategie. Elk bestand in een Z-Kubus wordt herschreven tijdens elke uitvoering. Een Z-Cube wordt alleen bewaard (overgeslagen) wanneer deze groter is dan 100 GB. Voor tabellen die kleiner zijn dan 100 GB, betekent de volledige herschrijfbewerking dat elke uitvoering alle OPTIMIZE tabelgegevens herschrijft, zelfs wanneer de gegevens al goed zijn geclusterd. Dit veroorzaakt ernstige schrijfversterking.

  • Gebruik geen automatische compressie met vloeistofclustering in Runtime 1.3. Elke trigger voor automatisch comprimeren kan ertoe leiden dat een volledige tabel opnieuw wordt geschreven in plaats van alleen de nieuwe/gewijzigde gegevens te clusteren.
  • Vermijd het uitvoeren OPTIMIZE na elke schrijfbewerking. Beperk in Runtime 1.3 clustering tot strategische, opzettelijke uitvoeringen en accepteer lagere versheid van clustering ertussen.

Incrementele vloeibare clustering, die deze schrijfversterking elimineert, is alleen beschikbaar vanaf Fabric Runtime 2.0.

Incrementele vloeibare clustering

Vanaf Fabric Runtime 2.0 (Delta 4.1) maakt liquid clustering standaard gebruik van een incremental clusteringstrategie. De incrementele strategie is een aanzienlijke verbetering ten opzichte van het standaardclustergedrag.

Important

Incrementele vloeibare clustering is alleen beschikbaar in Fabric Runtime 2.0 en hoger. In eerdere runtimes OPTIMIZE wordt het standaardgedrag (volledig herschrijven) gebruikt waarbij alle bestanden in een Z-Kubus bij elke uitvoering opnieuw worden geschreven.

Waarom de strategie voor incrementele clustering belangrijk is

Het standaardclusteralgoritmen herschrijven alle bestanden binnen een Z-Kubus (maximaal 100 GB) tijdens elke OPTIMIZE uitvoering, ongeacht of ze al goed zijn geclusterd. Voor een tabel met kleine toevoegbewerkingen neemt de clusterkosten lineair toe met de tabelgrootte, niet met de hoeveelheid nieuwe gegevens.

Incrementele modus lost het probleem met volledig herschrijven op door alleen bestanden te selecteren die daadwerkelijk clustering nodig hebben:

  • Niet-geclusterde bestanden: nieuw geschreven gegevens zonder clustermetagegevens
  • Kleine bestanden: bestanden onder de drempelwaarde voor de doelbestandsgrootte
  • Bestanden met verwijderingsvectoren: Bestanden met verzamelde verwijderingen overschrijden de opschoondrempel

Bestanden die al goed geclusterd zijn en van de juiste grootte zijn, worden volledig overgeslagen.

Automatisch opnieuw clusteren

Incrementele vloeibare clustering omvat automatische overlappingsdetectie, ook wel automatisch opnieuw clusteren genoemd, om de kwaliteit van clustering in de loop van de tijd te behouden. Wanneer er nieuwe gegevens binnenkomen, kan er overlap ontstaan tussen bestandswaardebereiken, waardoor de effectiviteit van het overslaan van gegevens afneemt. Met automatisch opnieuw clusteren worden overlappende waardebereiken in bestanden gedetecteerd en worden alleen de betrokken bestanden selectief opnieuw geclusterd.

Automatisch opnieuw clusteren wordt automatisch uitgevoerd als onderdeel van OPTIMIZE wanneer er nieuwe of gewijzigde gegevens in het cluster zijn. Er zijn geen handmatige interventie of geplande volledige reclusters vereist. De strategie voor incrementele clustering behoudt bijna optimale clusteringkwaliteit naarmate gegevens zich ontwikkelen.

Gedrag van volledig herschrijven herstellen

Als u de strategie voor incrementele clustering wilt uitschakelen en het gedrag voor volledig herschrijven wilt gebruiken, stelt u de volgende configuratie in:

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

OPTIMIZE sales;

U kunt ook een eenmalige volledige recluster gebruiken OPTIMIZE FULL zonder sessie-instellingen te wijzigen:

OPTIMIZE sales FULL;

Note

De incrementele clusteringstrategie maakt opzettelijk een kleine afwijking van de theoretisch optimale indeling mogelijk om aanzienlijke verminderingen in schrijfversterking te bereiken. Door OPTIMIZE FULL uit te voeren, wordt die kloof gedicht doordat Z-Cubes volledig opnieuw worden opgebouwd tot het theoretische optimum, maar tegen hogere schrijfkosten.

Configuratiegids

De volgende sessieconfiguraties beheren het gedrag van liquid clustering in Fabric Runtime 2.0+.

Incrementeel clusteren

Configuration Type Default Description
spark.microsoft.delta.optimize.clustering.strategy.incremental Booleaan true Hoofdswitch voor incrementele clustering. Wanneer true, verwerkt OPTIMIZE alleen niet-geclusterde, ongezonde, kleine bestanden en bestanden met verwijderingsvectoren. Wanneer false, worden alle bestanden voor Z-Kubussen kleiner dan 100 GB herschreven (standaardgedrag).
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster Booleaan true Hiermee schakelt u automatische detectie en herclustering van bestanden met overlappende gegevensbereiken in. Alleen van toepassing wanneer incrementele clustering is ingeschakeld.

Automatisch opnieuw clusteren afstemmen

Deze configuraties bepalen de gevoeligheid en het bereik van automatische reclustering. De standaardinstellingen zijn geschikt voor de meeste workloads. Pas deze alleen aan wanneer u de afweging tussen clusterkwaliteit en schrijfversterking moet wijzigen.

Configuration Type Default Description
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOffendingFiles Int 4 Minimaal aantal overlappende bestanden dat nodig is om reclustering te activeren. Lagere waarden worden sneller opnieuw geclusterd (betere queryprestaties, hogere schrijfkosten). Moet ≥ 2 zijn.
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOverlapThreshold Double 0.75 Drempelwaarde voor de overlapscore van de clusteringdimensie. Bestandsparen die boven deze waarde scoren, worden beschouwd als overlappend. Moet binnen het bereik liggen (0,25, 1,0]. Lagere waarden zijn agressiever.

Clusteringkolommen kiezen

Kies voor de beste resultaten clusteringkolommen op basis van uw meest voorkomende queryfilterpatronen:

  • Kies 1 tot 4 kolommen die vaak voorkomen in WHERE-clausules. Meer kolommen verminderen de effectiviteit van het per kolom overslaan van bestanden door de ruimte-vullende curve en verhogen de tijd die nodig is om gegevens te clusteren.
  • Overweeg de kolomkardinaliteit. Kolommen met lage kardinaliteit produceren minder afzonderlijke waardebereiken, wat het voordeel van het overslaan van bestanden vermindert in combinatie met clusteringsleutels met hoge kardinaliteit.
  • Kolomvolgorde heeft geen invloed op clustering. De volgorde van de kolommen die na CLUSTER BY zijn opgegeven, heeft geen invloed op de uiteindelijke multidimensionale clustering.

Ondersteunde kolomtypen

Niet alle kolomtypen kunnen worden gebruikt als clustersleutels. De engine evalueert het gegevenstype van elke kolom om de geschiktheid te bepalen.

Altijd in aanmerking komend (atomische typen):

  • NumericType(ByteType, ShortType, IntegerType, LongType, , FloatType, DoubleType) DecimalType
  • DateType
  • TimestampType
  • TimestampNTZType
  • StringType

Voorwaardelijk in aanmerking komend:

Note

De volgende typen kunnen worden ingeschakeld vanaf Fabric Spark Runtime 2.0 (Delta 4.1)

  • StructType: wanneer spark.microsoft.delta.clusteredTable.complexTypes.enabled is ingeschakeld en alle bladvelden zelf geschikte typen zijn.
  • ArrayType: wanneer spark.microsoft.delta.clusteredTable.complexTypes.enabled is ingeschakeld en het elementtype in aanmerking komt.
  • MapType: wanneer spark.microsoft.delta.clusteredTable.complexTypes.enabled is ingeschakeld en zowel de sleutel- als waardetypen kunnen worden gesorteerd en in aanmerking komen.

Komt niet in aanmerking:

  • BinaryType
  • BooleanType
  • NullType

Zie Bestand overslaan( In aanmerking komende gegevenstypen) voor de equivalente typen die worden gebruikt in statistieken op bestandsniveau.

Interactie met andere functies

Feature Gedrag
Partitionering Niet compatibel. Om bestanden te kunnen overslaan, wordt liquid clustering aanbevolen boven partitionering.
Z-Order Niet compatibel. Voor het overslaan van bestanden wordt vloeibare clustering aanbevolen via Z-Order.
Snel optimaliseren Compatibel vanaf Runtime 2.0. In eerdere runtimes heeft snelle optimalisatie geen effect op geclusterde liquide tabellen. Tijdens OPTIMIZE wordt clustering overgeslagen wanneer er niet genoeg kleine bestanden zijn of onvoldoende gegevens om een uitvoerbestand van bruikbare grootte te produceren.
Adaptieve doelbestandsgrootte Compatibel. De doelbestandsgrootte die is ingesteld door adaptieve evaluatie, wordt gebruikt als de doelgrootte voor clustering.
Schrijven optimaliseren Compatibel. Produceert bij het schrijven geconsolideerde bestanden, die vervolgens tijdens OPTIMIZE worden geclusterd.
Automatische compressie Gebruik niet met liquide clustering in Runtime 1.3 of eerder. In deze runtimes herschrijft elke automatische compressietrigger alle gegevens in Z-Cubes kleiner dan 100 GB, wat ernstige schrijfversterking veroorzaakt. In Runtime 2.0+ is automatische compressie compatibel: incrementele clustering zorgt ervoor dat alleen nieuwe of beschadigde bestanden opnieuw worden geschreven. Automatische compactie verzorgt het samenvoegen van kleine bestanden; OPTIMIZE verzorgt de clusterindeling.
Verwijderingsvectoren Bestanden die de drempelwaarde voor verwijderde rijen overschrijden, worden geselecteerd voor clustering, onafhankelijk van hun clusteringstatus.
V-Order Compatibel. V-Order en liquid clustering werken op verschillende assen (bestands-interne indeling versus waardebereiken tussen bestanden). Beide kunnen samen worden toegepast.

Beste praktijken

  • Voer OPTIMIZE regelmatig uit nadat batch-schrijfbewerkingen of volgens een schema voor streamingtabellen zijn uitgevoerd, maar alleen in Runtime 2.0+, waarbij de incrementele clusteringstrategie frequente uitvoeringen goedkoop maakt. In Runtime 1.3 en eerder herschrijft elke OPTIMIZE uitvoering alle gegevens in Z-Cubes onder 100 GB, dus uitvoeringen moeten opzettelijk en onregelmatig zijn.
  • Gebruik OPTIMIZE FULL spaarzaam. Gebruik dit pas nadat u de clusteringkolommen hebt gewijzigd of wanneer u een eenmalige kwaliteitsreset nodig hebt.
  • Bewaak de clusterkwaliteit door metrische gegevens van queryscans te controleren (bestanden gescand versus totaal aantal bestanden) in de Spark-gebruikersinterface of queryplannen.
  • Combineer met het optimaliseren van schrijfbewerkingen voor streamingworkloads om ervoor te zorgen dat elke microbatch een beheerbaar aantal bestanden produceert voor clustering.