Entwerfen und Implementieren einer Clusteringstrategie
Die Optimierung der physischen Organisation von Daten auf dem Datenträger wirkt sich direkt auf die Abfrageleistung und die Speichereffizienz aus. Wenn Sie eine Clusteringstrategie für Ihre Delta Lake-Tabellen entwerfen, bestimmen Sie, wie das Abfragemodul relevante Daten findet und abruft. Der richtige Ansatz kann die Menge der während Abfragen gescannten Daten erheblich reduzieren und sowohl die Reaktionszeiten als auch die Berechnungskosten verringern.
Azure Databricks bietet mehrere ergänzende Techniken für die Datenorganisation. Wenn Sie wissen, wann Liquid Clustering, Z-Sortierung oder Löschvektoren angewendet werden sollen, können Sie Entscheidungen treffen, die Leistung, Wartungsaufwand und Kompatibilität mit Ihren vorhandenen Tabellen ausgleichen.
Grundlagen des Datenüberspringens
Bevor man bestimmte Clustering-Techniken untersucht, ist es wichtig, den zugrunde liegenden Mechanismus zu verstehen, den sie alle nutzen: Datenüberspringen. Delta Lake sammelt automatisch Statistiken für jede Datendatei, einschließlich Mindest- und Höchstwerte, Nullanzahlen und Datensatzanzahlen für jede Spalte. Wenn Sie eine Abfrage mit Filterbedingungen ausführen, überprüft das Abfragemodul diese Statistiken zuerst und überspringt Dateien, die möglicherweise keine übereinstimmenden Datensätze enthalten können.
Wenn Sie beispielsweise Umsatzdaten für Januar 2026 abfragen und die Statistiken einer bestimmten Datei zeigen, dass sie nur Datensätze aus März 2026 enthält, überspringt das Modul diese Datei vollständig, ohne den Inhalt zu lesen. Diese Optimierung erfolgt automatisch, aber ihre Effektivität hängt davon ab, wie gut Ihre Daten organisiert sind.
Das Überspringen von Daten wird sehr leistungsfähig, wenn verwandte Datensätze in denselben Dateien gespeichert werden . Wenn Datensätze für jeden Monat zufällig über alle Dateien verteilt werden, kann das Modul keine Dateien überspringen, da jede Datei Datensätze aus jedem Monat enthält. Clustering-Techniken sind vorhanden, um genau dieses Problem zu lösen.
Implementieren von Flüssigclustering für neue Tabellen
Liquid Clustering ist der empfohlene Ansatz zum Organisieren von Daten in neuen Delta Lake-Tabellen und ist auch in der öffentlichen Vorschau für verwaltete Apache Iceberg-Tabellen im Unity Catalog (Databricks Runtime 16.4 LTS und höher) verfügbar. Im Gegensatz zur herkömmlichen Partitionierung können Sie Ihre Clustering-Strategie ändern, ohne dass vorhandene Daten neu geschrieben werden müssen. Diese Flexibilität ist nützlich, wenn Sich Abfragemuster entwickeln oder unsicher sind, welche Spalten am häufigsten gefiltert werden.
Hinweis
Für verwaltete Iceberg-Tabellen im Unity-Katalog wird die Angabe einer PARTITION BY Klausel als flüssige Clusteringschlüssel interpretiert – nicht als herkömmliche Partitionen im Hive-Stil. Es gibt kein separates Iceberg-spezifisches Partitionsverhalten; Alle Layoutoptimierungen durchlaufen flüssigen Clustering.
Verwenden Sie zum Aktivieren des Flüssigclusterings die CLUSTER BY Klausel beim Erstellen einer Tabelle:
CREATE TABLE sales.transactions (
transaction_id STRING,
customer_id STRING,
product_category STRING,
region STRING,
transaction_date DATE,
amount DECIMAL(12,2)
)
CLUSTER BY (region, transaction_date);
Sie können bis zu vier Clusteringtasten angeben. Wählen Sie Spalten aus, die häufig in Ihren Abfragefiltern angezeigt werden. Die Reihenfolge der Clusterschlüssel ist weniger wichtig als die Auswahl der richtigen Spalten, da das flüssige Clustering für alle angegebenen Schlüssel gleichzeitig optimiert wird.
Führen Sie nach dem Erstellen einer gruppierten Tabelle den OPTIMIZE Befehl aus, um clustering auf Ihre Daten anzuwenden:
OPTIMIZE sales.transactions;
Flüssigclustering ist inkrementell. Jede OPTIMIZE Ausführung clustert nur die Daten, die eine Reorganisation erfordern, was die regelmäßige Wartung effizienter gestaltet. Databricks empfiehlt, Aufträge alle ein oder zwei Stunden für Tabellen mit häufigen Einfügungen oder Aktualisierungen zu planen OPTIMIZE .
Tipp
Aktivieren Sie für verwaltete Tabellen im Unity-Katalog die Vorhersageoptimierung zum Automatisieren von Vorgängen OPTIMIZE . Azure Databricks analysiert Ihre Workloadmuster und führt Wartungsvorgänge automatisch aus.
Ändern von Clusteringschlüsseln bei Bedarf
Ein erheblicher Vorteil des Flüssigclusterings gegenüber der Partitionierung ist die Möglichkeit, Ihre Clusteringstrategie zu ändern. Wenn sich Ihre Abfragemuster ändern, aktualisieren Sie die Clusteringschlüssel mit einer ALTER TABLE Anweisung:
ALTER TABLE sales.transactions
CLUSTER BY (customer_id, transaction_date);
Nachfolgende OPTIMIZE Vorgänge verwenden den neuen Clustering-Ansatz. Zuvor geschriebene Daten werden nicht automatisch neu geschrieben. Führen Sie Folgendes aus, um ein neues Clustering auf alle vorhandenen Daten anzuwenden:
OPTIMIZE sales.transactions FULL;
Aktivieren der automatischen Cluster-Schlüsselauswahl
Azure Databricks können Clusteringschlüssel basierend auf Ihren tatsächlichen Abfragemustern intelligent auswählen. Die automatische Flüssigkeitsclusterung analysiert den Workloadverlauf und wählt Spalten aus, die den größten Datensprungvorteil bieten:
CREATE TABLE sales.orders CLUSTER BY AUTO;
Sie können die automatische Clusterung für vorhandene Tabellen aktivieren:
ALTER TABLE sales.transactions CLUSTER BY AUTO;
Die automatische Flüssigkeitsclusterung erfordert eine Vorhersageoptimierung, die aktiviert werden muss. Azure Databricks bewertet regelmäßig, ob verschiedene Clusteringschlüssel die Leistung verbessern und die Strategie entsprechend anpassen.
Migrieren von Z-Sortierung zu Flüssigclustering
Die Z-Sortierung ist eine ältere Technik, die Daten organisiert, um verwandte Informationen in denselben Dateien zuzuordnen. Während flüssiges Clustering für neue Tabellen empfohlen wird, werden Sie auf vorhandene Tabellen stoßen, die Z-Sortierung verwenden und beide Ansätze verstanden werden müssen.
Z-Sortierung verwendet den OPTIMIZE Befehl mit einer ZORDER BY Klausel:
OPTIMIZE sales.legacy_transactions
ZORDER BY (region, transaction_date);
Die Z-Sortierung unterscheidet sich in mehreren wichtigen Aspekten von der Flüssigkeitsclusterung.
| Aspekt | Flüssigkeits-Clusterbildung | Z-Sortierung |
|---|---|---|
| Schlüsselflexibilität | Ändern von Schlüsseln ohne Erneutes Schreiben von Daten | Zum Ändern von Schlüsseln ist eine vollständige Neuschreibung erforderlich. |
| Schreibleistung | Clusterbildung bei Schreiboperationen für berechtigte Vorgänge | Nur während OPTIMIZE angewendet |
| Gleichzeitige Schreibvorgänge | Parallelität auf Zeilenebene unterstützt | Parallelität auf Transaktionsebene |
| Compatibility | Erfordert Databricks Runtime 13.3 LTS oder höher | Unterstützt in allen Laufzeiten |
Wenn Sie eine Z-sortierte Tabelle erben, haben Sie zwei Optionen. Setzen Sie die Z-Sortierung für Konsistenz fort, oder migrieren Sie zur flüssigen Clusterung, um die Flexibilität zu verbessern. Um zu migrieren, aktivieren Sie zuerst liquid clustering in der vorhandenen nicht partitionierten Tabelle:
ALTER TABLE sales.legacy_transactions
CLUSTER BY (region, transaction_date);
Führen Sie dann eine vollständige Optimierung aus, um alle vorhandenen Daten neu zu organisieren:
OPTIMIZE sales.legacy_transactions FULL;
Von Bedeutung
Flüssigclustering ist nicht mit Partitionierung kompatibel. Bewerten Sie bei partitionierten Tabellen, ob die Vorteile von Liquid Clustering es rechtfertigen, zu einer nicht partitionierten Tabellenstruktur zu migrieren.
Verwalten von Löschvektoren für effiziente Updates
Löschvektoren adressieren einen anderen Aspekt der Datenorganisation: Wie Delta Lake geänderte oder gelöschte Datensätze verarbeitet. Wenn Sie eine einzelne Zeile in einer Parkettdatei aktualisieren oder löschen, muss Delta Lake die gesamte Datei standardmäßig neu schreiben. Bei Tabellen mit häufigen Änderungen verursacht dies einen erheblichen Aufwand.
Mit aktivierten Löschvektoren markiert Delta Lake geänderte Zeilen als gelöscht in einer separaten Metadatendatei, anstatt die Parquet-Datei sofort neu zu schreiben. Nachfolgende Lesevorgänge wenden diese Löschungen automatisch an, wobei die ursprüngliche Datei mit dem Löschvektor kombiniert wird, um genaue Ergebnisse zurückzugeben.
Löschvektoren sind standardmäßig für neue Tabellen aktiviert, die mit Databricks Runtime 14.1 oder höher erstellt wurden. Sie können sie explizit für vorhandene Tabellen aktivieren:
ALTER TABLE sales.transactions
SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
Löschvektoren werden physisch angewendet, wenn die Datendateien während der Folgenden neu geschrieben werden:
- Ein
OPTIMIZEBefehl - Automatische Komprimierungsauslöser
- Ein
REORG TABLE ... APPLY (PURGE)Vorgang
Führen Sie für Complianceszenarien, in denen Sie sicherstellen müssen, dass gelöschte Daten physisch entfernt werden, einen REORG Vorgang gefolgt von VACUUM:
REORG TABLE sales.transactions APPLY (PURGE);
VACUUM sales.transactions;
Löschvektoren ermöglichen auch die Parallelität auf Zeilenebene, sodass mehrere gleichzeitige Transaktionen verschiedene Zeilen in derselben Tabelle ohne Konflikte ändern können. Diese Funktion ist besonders nützlich für Tabellen mit hohen Updatevolumes.