Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Liquid Clustering ist eine flexible Datenlayoutstrategie für Delta-Tabellen in Microsoft Fabric. Es ersetzt statische Partitionierung im Hive-Stil und die manuelle Z-Order-Wartung durch deklaratives, änderungsfreundliches Clustering. Sie definieren, auf welche Spalten gruppiert werden sollen, und die Fabric Spark Runtime verarbeitet das physische Datenlayout automatisch.
Verwenden Sie diesen Artikel, um:
- Verstehen, wie flüssiger Cluster funktioniert und wann es verwendet werden soll.
- Vergleichen Sie Liquid Clustering mit Partitionierung und Z-Order.
- Konfigurieren Sie clustering in Ihren Tabellen.
- Inkrementelle Liquid-Clusterbildung verstehen (Runtime 2.0+).
- Passen Sie das Clustering-Verhalten mit Sitzungskonfigurationen an.
Was ist flüssiges Clustern?
Liquid Clustering organisiert Daten in Delta-Tabellendateien so, dass Zeilen mit ähnlichen Werten in den Clustering-Spalten zusammen angeordnet werden. Das Layout ermöglicht das erweiterte Überspringen von Dateien während der Abfrageausführung: Wenn ein Abfragemodul auf Clusterspalten filtert, liest das Modul nur die Dateien, deren Wertebereiche dem Prädikat entsprechen, und überspringt den Rest.
Im Gegensatz zur Partitionierung: Liquid Clustering:
- Erstellt keine physischen Verzeichnisstrukturen pro Spaltenwert.
- Erfordert nicht, dass Sie zum Zeitpunkt der Tabellenerstellung Clusteringspalten auswählen (sie können später geändert werden).
- Behandelt Spalten mit hoher Kardinalität, ohne potenzielle kleine Dateiprobleme aus Tausenden von winzigen Partitionen zu erstellen.
- Wendet die Layoutoptimierung während
OPTIMIZEan, nicht beim Schreiben.
Vorteile gegenüber Partitionierung und Z-Reihenfolge
Flüssiges Clustering bietet erhebliche Vorteile gegenüber der Partitionierung im Hive-Stil und Z-Order hinsichtlich Flexibilität, Wartung und Handhabung von sich entwickelnden Datenmustern.
Im Vergleich zur Partitionierung im Hive-Stil
| Aspect | Hive-Partitionierung | Flüssigkeitsclusterbildung |
|---|---|---|
| Granularität | Ein Verzeichnis pro unterschiedlichen Wert (oder Kombination) | Wertebereiche auf Dateiebene, keine Verzeichnisse |
| Hohe Kardinalität | Erstellt Tausende kleiner Dateien/Verzeichnisse | Verarbeitet Daten ganz natürlich; unterteilt Daten in Dateien passender Größe |
| Spaltenänderungen | Erfordert eine vollständige Neuschreibung der Tabelle |
ALTER TABLE ... CLUSTER BY gilt für nächstes OPTIMIZE |
| Schreibpfad | Partitionsspalte muss zur Schreibzeit bekannt sein | Jede Spalte kann nachträglich geclustert werden. |
| Problem mit kleiner Datei | Üblich bei Streaming oder häufigen Einfügungen | Verwaltet durch OPTIMIZE Komprimierung |
Verglichen mit Z-Order
| Aspect | Z-Reihenfolge | Flüssigkeitsclusterbildung |
|---|---|---|
| Spaltenänderungen | Muss mit neuen Spalten erneut ausgeführt werden OPTIMIZE ZORDER BY (...) |
ALTER TABLE ... CLUSTER BY behält die Definition bei |
| Inkrementelle Unterstützung | Kein inkrementeller Modus; verwenden WHERE , um den Bereich manuell einzuschränken |
Im inkrementellen Modus (Runtime 2.0+) werden nur neue, geänderte oder fehlerhafte Dateien automatisch verarbeitet. |
| Metadata | Keine persistente Spaltendefinition | In Tabellenmetadaten gespeicherte Clustering-Spalten |
| Mehrspaltiges Layout | Z-Order-Kurve zum Zeitpunkt der Optimierung angewendet | Z-Reihenfolge für eine Clusterspalte; Hilbertkurve für 2+ Spalten mit optimierter Datenlokalität |
Liquid Clustering verwendet Z-Order für einspaltige Layouts und die Hilbert-Kurve für Layouts mit zwei oder mehr Spalten – eine Verbesserung gegenüber Z-Order, bei dem nur die Z-Order-Kurve für mehrdimensionales Clustering verwendet wird. Liquid Clustering umschließt beide Algorithmen in einem inkrementellen, metadatenfähigen Framework, das laufende Wartungskosten reduziert.
Erstellen einer flüssigen gruppierten Tabelle
Definieren Sie Clustering-Spalten beim Erstellen der Tabelle mithilfe der CLUSTER BY Klausel:
-- 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);
Clustering-Spalten ändern
Im Gegensatz zur Partitionierung können Sie Clusterspalten jederzeit ändern, ohne Daten neu zu schreiben:
-- Change clustering columns
ALTER TABLE sales CLUSTER BY (region, product_category);
-- Remove clustering (table becomes unclustered)
ALTER TABLE sales CLUSTER BY NONE;
Nach dem Ändern der Spalten für die Clusterbildung wird das neue Layout beim nächsten OPTIMIZE-Lauf angewendet. Vorhandene Dateien behalten ihr vorheriges Layout bei, bis sie gruppiert sind.
Anwenden von Clustering mit OPTIMIZE
Clustering wird während des OPTIMIZE Befehls angewendet. Es ist nicht erforderlich, Spalten in der OPTIMIZE Anweisung anzugeben, da die Clusteringdefinition in Tabellenmetadaten gespeichert ist:
-- 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;
Verwenden Sie diese Option OPTIMIZE FULL , wenn Sie Clusteringschlüssel ändern und Z-Cubes neu erstellen möchten, die nicht der aktuellen Clusteringstrategie entsprechen. Ein Z-Cube ist die logische Einheit, die beim Liquid Clustering verwendet wird, um Dateien zu gruppieren, die dieselben Clustering-Spalten gemeinsam haben. Daten werden in einem einzelnen Z-Cube gruppiert, bis sich Clusterschlüssel ändern oder die Datenmenge 100 GB überschreitet.
Tipp
Ab Fabric Runtime 2.0 unterstützt das Native Ausführungsmodul das Ausführen von OPTIMIZE für flüssige gruppierte Tabellen und liefert 30 bis 50% schnellere mehrdimensionale Clusteringleistung. Frühere Laufzeiten greifen auf die reguläre, nicht beschleunigte Spark-Ausführung zurück.
Funktionsweise der Flüssigclusterung
Wenn Sie OPTIMIZE auf einer liquid-clustered-Tabelle ausführen, passiert Folgendes:
-
Dateiauswahl: Das Modul wählt Dateien aus, die Clustering benötigen.
- In Runtime 2.0+ (Strategie für inkrementelles Clustering) werden nur nicht geclusterte, problematische, kleine oder Dateien mit Löschvektoren ausgewählt.
- In Runtime 1.3 werden alle Dateien innerhalb jedes Z-Cubes ausgewählt, der kleiner als 100 GB ist, unabhängig davon, ob sie bereits gut gruppiert sind.
- Containerverpackung: Ausgewählte Dateien werden in Containern gruppiert, die auf eine optimale Ausgabedateigröße ausgerichtet sind.
- Neupartitionierung: Die Daten innerhalb jedes Buckets werden mithilfe einer raumfüllenden Kurve neu partitioniert (Hilbertkurve für mehrere Spalten, Z-Order-Kurve für eine einzelne Spalte).
- Schreiben von Dateien: Umpartitionierte Daten werden als neue Dateien mit eng gefassten Wertebereichen in den Clustering-Spalten geschrieben.
- Metadatenaktualisierung: Das Delta-Protokoll zeichnet den Dateiersetzungsvorgang auf und kategorisiert neue Dateien mit Clusteringmetadaten.
Das Ergebnis sind Dateien mit nicht überlappenden (oder minimal überlappenden) Wertbereichen in Clusterspalten, sodass das Modul Dateien überspringen kann, die nicht mit Abfrage-Prädikaten übereinstimmen.
Vorsicht
Fabric Runtime 1.3 (Delta 3.2): Verwenden Sie flüssigen Clustering mit Vorsicht. In dieser Laufzeit verwendet liquid clustering eine vollständige Z-Cube-Umschreibungsstrategie – jede Datei innerhalb eines Z-Cubes wird bei jeder Ausführung neu geschrieben. Ein Z-Cube wird nur beibehalten (übersprungen), wenn seine Größe 100 GB überschreitet. Bei Tabellen, die kleiner als 100 GB sind, bedeutet die vollständige Neuschreibung, dass bei jeder Ausführung alle OPTIMIZE Tabellendaten neu geschrieben werden, auch wenn die Daten bereits gut gruppiert sind. Dies verursacht eine starke Schreibverstärkung.
- Verwenden Sie keine automatische Kompaktierung mit Liquid Clustering in Runtime 1.3. Jeder automatische Komprimierungsauslöser kann dazu führen, dass eine vollständige Tabelle neu geschrieben wird, anstatt nur die neuen/geänderten Daten zu clustern.
- Vermeiden Sie,
OPTIMIZEnach jedem Schreibvorgang auszuführen. Beschränken Sie in Runtime 1.3 die Clusterbildung auf strategische, gezielte Ausführungen und akzeptieren Sie dazwischen eine geringere Aktualität der Cluster.
Inkrementelles Liquid Clustering, das diese Schreibverstärkung beseitigt, ist erst ab Fabric Runtime 2.0 verfügbar.
Inkrementelle Flüssigkeitsclustering
Ab Fabric Runtime 2.0 (Delta 4.1) wird bei Liquid Clustering standardmäßig eine inkrementelle Clustering-Strategie verwendet. Die inkrementelle Strategie ist eine erhebliche Verbesserung des Standardclusteringverhaltens.
Important
Inkrementelles Liquid Clustering ist nur in Fabric Runtime 2.0 und höheren Versionen verfügbar. In früheren Laufzeiten verwendet OPTIMIZE das Standardverhalten (vollständige Neuschreibung), bei dem alle Dateien innerhalb eines Z-Cube bei jeder Ausführung neu geschrieben werden.
Warum die inkrementelle Clusteringstrategie wichtig ist
Der Standardclusteringalgorithmus schreibt alle Dateien in einem Z-Cube (bis zu 100 GB) bei jeder OPTIMIZE Ausführung neu, unabhängig davon, ob sie bereits gut gruppiert sind. Bei einer Tabelle, die kleine Anfügedaten empfängt, wächst die Clusterungskosten linear mit Tabellengröße, nicht mit der Menge neuer Daten.
Im inkrementellen Modus wird das Problem mit dem vollständigen Umschreiben behoben, indem nur Dateien ausgewählt werden, die tatsächlich Clustering benötigen:
- Nicht gruppierte Dateien: Neu geschriebene Daten ohne Clustering-Metadaten
- Kleine Dateien: Dateien unter dem Schwellenwert für die Zieldateigröße
- Dateien mit Löschvektoren: Dateien mit angesammelten Löschvorgängen, die den Bereinigungsschwellenwert überschreiten
Bereits gut gruppierte und angemessen dimensionierte Dateien werden vollständig übersprungen.
Automatisches Neuclustering
Die inkrementelle Flüssigkeitsclustering umfasst die automatische Überlappungserkennung, die als automatisches Neuclustering bezeichnet wird, um die Clusterqualität im Laufe der Zeit aufrechtzuerhalten. Wenn neue Daten eintreffen, können sie zu Überlappungen zwischen den Wertebereichen von Dateien führen, wodurch die Wirksamkeit des Daten-Skippings beeinträchtigt wird. Die automatische Neuclusterung erkennt überlappende Wertebereiche über Dateien hinweg und gruppiert selektiv nur die betroffenen Dateien erneut.
Die automatische Neugruppierung wird als Teil von OPTIMIZE ausgeführt, sobald es neue oder geänderte Daten gibt, die gruppiert werden müssen. Es sind keine manuellen Eingriffe oder geplanten vollständigen Neu-Clusterings erforderlich. Die Strategie für inkrementelles Clustering gewährleistet eine nahezu optimale Clusterqualität, während sich die Daten weiterentwickeln.
Auf vollständiges Umschreibverhalten zurücksetzen
Wenn Sie die inkrementelle Clusteringstrategie deaktivieren und das Verhalten des vollständigen Umschreibens verwenden müssen, legen Sie die folgende Konfiguration fest:
SET spark.microsoft.delta.optimize.clustering.strategy.incremental = FALSE;
OPTIMIZE sales;
Alternativ können Sie mit OPTIMIZE FULL eine einmalige vollständige Neu-Clusterung durchführen, ohne die Sitzungseinstellungen zu ändern:
OPTIMIZE sales FULL;
Note
Die inkrementelle Clustering-Strategie ermöglicht absichtlich eine geringfügige Abweichung vom theoretisch optimalen Layout, um erhebliche Reduzierungen der Schreibverstärkung zu erzielen. Durch Ausführen von OPTIMIZE FULL wird diese Lücke geschlossen, indem Z-Cubes vollständig bis zum theoretischen Optimum neu aufgebaut werden, allerdings zu höheren Schreibkosten.
Konfigurationsreferenz
Die folgenden Sitzungskonfigurationen steuern das Verhalten des flüssigen Clusterings in Fabric Runtime 2.0+.
Inkrementelle Clusterbildung
| Konfiguration | Typ | Vorgabe | Description |
|---|---|---|---|
spark.microsoft.delta.optimize.clustering.strategy.incremental |
Boolean | true |
Hauptschalter für die inkrementelle Clusterbildung. Wenn true, OPTIMIZE werden nur nicht geclusterte, fehlerhafte, kleine und Dateien mit Löschvektoren verarbeitet. Wenn false, werden alle Dateien für Z-Cubes mit einer Größe von unter 100 GB neu geschrieben (Standardverhalten). |
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster |
Boolean | true |
Ermöglicht die automatische Erkennung und Neuclusterung von Dateien mit überlappenden Datenbereichen. Gilt nur, wenn die inkrementelle Clustering aktiviert ist. |
Automatische Recluster-Optimierung
Diese Konfigurationen steuern die Empfindlichkeit und den Umfang der automatischen erneuten Clusterung. Die Standardwerte eignen sich für die meisten Workloads. Passen Sie sie nur an, wenn Sie den Kompromiss zwischen Clusterqualität und Schreibverstärkung ändern müssen.
| Konfiguration | Typ | Vorgabe | Description |
|---|---|---|---|
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOffendingFiles |
Int | 4 |
Mindestanzahl überlappender Dateien, die zum Auslösen der Neuclusterung erforderlich sind. Niedrigere Werte führen früher zu einer Neugruppierung (bessere Abfrageleistung, höhere Schreibkosten). Muss ≥ 2 sein. |
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOverlapThreshold |
Double | 0.75 |
Schwellenwert für die Überlappungsbewertung von Clusterdimensionen. Dateipaare mit einer Bewertung über diesem Wert werden als überlappend betrachtet. Muss im Bereich liegen (0,25, 1,0]. Niedrigere Werte sind aggressiver. |
Auswahl von Clustering-Spalten
Um optimale Ergebnisse zu erzielen, wählen Sie Clusterspalten basierend auf Ihren am häufigsten verwendeten Abfragefiltermustern aus:
-
Wählen Sie 1 bis 4 Spalten aus, die häufig in
WHEREKlauseln angezeigt werden. Mehr Spalten verringern die Wirksamkeit des dateibezogenen Überspringens pro Spalte durch die raumfüllende Kurve und erhöhen den Zeitaufwand für das Clustern der Daten. - Berücksichtigen Sie die Spaltenkardinalität. Spalten mit niedriger Kardinalität erzeugen weniger verschiedene Wertebereiche, was den Vorteil des Dateiüberspringens verringert, wenn sie mit Clusterschlüsseln mit hoher Kardinalität kombiniert werden.
-
Die Spaltenreihenfolge hat keine Auswirkungen auf das Clustering. Die Reihenfolge der nach
CLUSTER BYangegebenen Spalten hat keinen Einfluss auf die resultierende mehrdimensionale Clusterung.
Unterstützte Spaltentypen
Nicht alle Spaltentypen können als Clusterschlüssel verwendet werden. Das Modul wertet den Datentyp jeder Spalte aus, um die Berechtigung zu ermitteln.
Immer zulässig (atomare Typen):
-
NumericType(ByteType,ShortType,IntegerType,LongType,FloatType,DoubleType,DecimalType) DateTypeTimestampTypeTimestampNTZTypeStringType
Bedingt berechtigt:
Note
Die folgenden Typen können ab Fabric Spark Runtime 2.0 (Delta 4.1) aktiviert werden.
-
StructType: wennspark.microsoft.delta.clusteredTable.complexTypes.enabledaktiviert ist und alle Blattfelder selbst zulässige Typen sind. -
ArrayType: wennspark.microsoft.delta.clusteredTable.complexTypes.enabledaktiviert ist und der Elementtyp berechtigt ist. -
MapType: wennspark.microsoft.delta.clusteredTable.complexTypes.enabledaktiviert ist und sowohl der Schlüssel- als auch der Werttyp geordnet und berechtigt sind.
Nicht berechtigt:
BinaryTypeBooleanTypeNullType
Informationen zu den entsprechenden zulässigen Typen, die in Statistiken auf Datei-Ebene verwendet werden, finden Sie unter Überspringen von Dateien – Zulässige Datentypen.
Interaktion mit anderen Features
| Funktion | Behavior |
|---|---|
| Partitionierung | Inkompatibel. Zum Überspringen von Dateien wird Liquid Clustering anstelle der Partitionierung empfohlen. |
| Z-Order | Inkompatibel. Zum Überspringen von Dateien wird Liquid Clustering anstelle von Z-Order empfohlen. |
| Schnelle Optimierung | Kompatibel ab Runtime 2.0. In früheren Laufzeiten hat schnelle Optimierung keine Auswirkungen auf flüssige gruppierte Tabellen. Während OPTIMIZE wird das Clustering übersprungen, wenn nicht genügend kleine Dateien oder nicht genügend Daten vorhanden sind, um eine Ausgabedatei in angemessener Größe zu erzeugen. |
| Größe der adaptiven Zieldatei | Kompatibel. Die durch adaptive Auswertung festgelegte Zieldateigröße wird als Zielgröße für clustering verwendet. |
| Optimieren des Schreibvorgangs | Kompatibel. Erzeugt beim Schreiben konsolidierte Dateien, die dann während OPTIMIZE geclustert werden. |
| Automatische Komprimierung | Nicht mit Liquid Clustering in Runtime 1.3 oder früheren Versionen verwenden. In diesen Laufzeiten schreibt jeder automatische Komprimierungstrigger alle Daten in Z-Cubes um, die kleiner als 100 GB sind und zu einer starken Schreibverstärkung führen. In Runtime 2.0+ ist die automatische Komprimierung kompatibel: Durch inkrementelles Clustering wird sichergestellt, dass nur neue oder fehlerhafte Dateien neu geschrieben werden. Die automatische Kompaktierung übernimmt die Konsolidierung kleiner Dateien; OPTIMIZE übernimmt das Cluster-Layout. |
| Vektoren löschen | Dateien, die den Schwellenwert für gelöschte Zeilen überschreiten, werden für das Clustering ausgewählt, unabhängig vom Clusteringstatus. |
| V-Reihenfolge | Kompatibel. V-Order und Liquid Clustering funktionieren auf verschiedenen Achsen (dateiinternes Layout im Vergleich zu dateiübergreifenden Wertbereichen). Beide können zusammen angewendet werden. |
Bewährte Methoden
-
Führen Sie
OPTIMIZEregelmäßig nach Batch-Schreibvorgängen oder nach einem Zeitplan für Streaming-Tabellen aus – jedoch nur in Runtime 2.0+, wo die inkrementelle Clustering-Strategie häufige Ausführungen kostengünstig macht. In Runtime 1.3 und früheren Versionen schreibt jede Ausführung alleOPTIMIZEDaten in Z-Cubes unter 100 GB neu, daher sollten Ausführungen beabsichtigt und selten sein. -
Sparsam verwenden
OPTIMIZE FULL. Verwenden Sie sie nur, nachdem Sie Clustering-Spalten geändert haben oder wenn Sie eine einmalige Qualitätsrücksetzung benötigen. - Überwachen Sie die Clusterqualität , indem Sie Abfragescanmetriken (Dateien, die im Vergleich zu Gesamtdateien gescannt wurden) in Spark UI oder Abfrageplänen überprüfen.
- Kombinieren Sie die Kombination mit der Optimierung von Schreibvorgängen für Streaming-Workloads, um sicherzustellen, dass jeder Mikrobatch eine verwaltbare Anzahl von Dateien für das Clustering erzeugt.