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 Technik zur Datenlayout-Optimierung, die an die Stelle der Tabellenpartitionierung tritt und ZORDER. Sie vereinfacht die Tabellenverwaltung und optimiert die Abfrageleistung, indem Daten basierend auf Clusteringschlüsseln automatisch organisiert werden.
Im Gegensatz zur herkömmlichen Partitionierung können Sie Clusteringschlüssel neu definieren, ohne vorhandene Daten neu zu schreiben. Dies ermöglicht es Ihrem Datenlayout, sich zusammen mit den sich ändernden Analyseanforderungen zu entwickeln. Flüssiges Clustering gilt sowohl für Streamingtabellen als auch für materialisierte Ansichten.
Von Bedeutung
Liquid clustering is generally available for Delta Lake tables with Databricks Runtime 15.4 LTS and above, and in Public Preview for Apache Iceberg tables in Databricks Runtime 16.4 LTS and above. Databricks empfiehlt die Verwendung der neuesten Databricks Runtime für die beste Leistung.
Verwaltete Apache Iceberg v3-Tabellen unterstützen auch Löschvektoren, Zeilenverfolgung, Zeilenkoncurrenz und automatisches Flüssigclustering. Diese Funktionen erfordern Databricks Runtime 18.0 und höher. Siehe "Apache Iceberg v3-Features verwenden".
Wann man Flüssigclustering verwenden sollte
Databricks empfiehlt eine flüssige Clusterung für alle neuen Tabellen, einschließlich Streamingtabellen und materialisierter Ansichten. Die folgenden Szenarien profitieren insbesondere von Clustering:
- Abfragen, die nach Spalten mit hoher Kardinalität filtern.
- Tabellen mit erheblicher Datenverzerrung.
- Schnell wachsende Tabellen, die Wartungs- und Optimierungsaufwand erfordern.
- Tabellen mit zeitgleichen Schreibanforderungen.
- Tabellen mit unterschiedlichen oder sich ändernden Zugriffsmustern.
- Tabellen, in denen ein typischer Partitionsschlüssel möglicherweise Ergebnisse von zu vielen oder zu wenigen Partitionen zurückgibt.
Aktivieren von Liquid Clustering
Sie können das Flüssigclustering für eine vorhandene nicht partitionierte Tabelle oder während der Tabellenerstellung aktivieren. Clustering ist nicht kompatibel mit Partitionierung oder ZORDER. Databricks empfiehlt, der Plattform die Verwaltung aller Layout- und Optimierungsvorgänge für Daten in Ihrer Tabelle zu überlassen. Führen Sie nach dem Aktivieren des Liquid Clustering OPTIMIZE Jobs aus, um Daten inkrementell zu clustern. Weitere Informationen finden Sie unter Auslösen von Clustering.
Erstellen von Tabellen mit Clustering
Um Liquid Clustering zu aktivieren, fügen Sie die CLUSTER BY-Klausel einer Tabellenerstellung hinzu, wie in den folgenden Beispielen gezeigt. In Databricks Runtime 14.3 LTS und höher können Sie DataFrame-APIs und DeltaTable-API in Python oder Scala verwenden, um flüssigen Clustering für Delta Lake-Tabellen zu ermöglichen.
SQL
So erstellen Sie eine leere Tabelle mit Clustering:
CREATE TABLE table1 (col0 INT, col1 STRING) CLUSTER BY (col0);
Um eine Tabelle aus vorhandenen Daten mit Clustering zu erstellen, CLUSTER BY muss nach dem Tabellennamen und nicht in der SELECT Klausel angezeigt werden:
CREATE TABLE table2 CLUSTER BY (col0)
AS SELECT * FROM table1;
So kopieren Sie eine Tabellenstruktur einschließlich ihrer Clusterkonfiguration:
CREATE TABLE table3 LIKE table1;
Python
So erstellen Sie eine leere Tabelle mit Clustering mithilfe der DeltaTable API:
(DeltaTable.create()
.tableName("table1")
.addColumn("col0", dataType = "INT")
.addColumn("col1", dataType = "STRING")
.clusterBy("col0")
.execute())
So erstellen Sie eine Tabelle aus einem vorhandenen DataFrame:
df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")
So erstellen Sie eine Tabelle mit der DataFrameWriterV2 API (verfügbar in Databricks Runtime 14.2 und höher):
df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
Scala
So erstellen Sie eine leere Tabelle mit Clustering mithilfe der DeltaTable API:
DeltaTable.create()
.tableName("table1")
.addColumn("col0", dataType = "INT")
.addColumn("col1", dataType = "STRING")
.clusterBy("col0")
.execute()
So erstellen Sie eine Tabelle aus einem vorhandenen DataFrame:
val df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")
So erstellen Sie eine Tabelle mit der DataFrameWriterV2 API (verfügbar in Databricks Runtime 14.2 und höher):
val df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
Von Bedeutung
Wenn Sie DataFrame-APIs zum Festlegen von Clusterschlüsseln verwenden, können Sie bei der Tabellenerstellung oder beim Verwenden des overwrite Modus (z. B. bei CREATE OR REPLACE TABLE Vorgängen) nur Clusterspalten angeben. Sie können Clustering Keys nicht ändern, wenn Sie den Modus append verwenden.
Verwenden Sie SQL-Befehle, um Clustering-Keys in einer vorhandenen Tabelle zu ändern und dabei Daten anzufügen. Passen Sie die Clusterkonfiguration unabhängig von Ihren Datenschreibvorgängen an. Siehe Ändern von Clusteringschlüsseln.
In Databricks Runtime 16.4 LTS und höher können Sie Tabellen mit flüssiger Clusterung erstellen, die mit strukturierten Streaming-Schreibvorgängen aktiviert sind, wie in den folgenden Beispielen gezeigt:
SQL
CREATE TABLE table1 (
col0 STRING,
col1 DATE,
col2 BIGINT
)
CLUSTER BY (col0, col1);
Python
(spark.readStream.table("source_table")
.writeStream
.clusterBy("column_name")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
)
Scala
spark.readStream.table("source_table")
.writeStream
.clusterBy("column_name")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Warnung
Delta Lake-Tabellen mit aktivierter Flüssigclustering verwenden Delta Writer Version 7 und Reader Version 3. Delta-Clients, die diese Protokolle nicht unterstützen, können diese Tabellen nicht lesen. Sie können keine Downgradetabellenprotokollversionen ausführen. Siehe Delta Lake Featurekompatibilität und Protokolle.
Informationen zum Überschreiben der Standardmäßigen Featureaktivierung, z. B. Vektoren zum Löschen, finden Sie unter Außerkraftsetzen der Standardmäßigen Featureaktivierung (optional).
Für vorhandene Tabellen aktivieren
Gehen Sie wie folgt vor, um die Flüssigkeitsclusterung auf einer vorhandenen nicht partitionierten Delta Lake-Tabelle zu aktivieren:
ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)
Beachten Sie für verwaltete Apache Iceberg-Tabellen Folgendes:
- Bei Tabellen mit der v2-Spezifikation müssen Sie Löschvektoren und Zeilennachverfolgung explizit deaktivieren, wenn sie flüssige Clustering für eine vorhandene Tabelle aktivieren.
- Für Tabellen mit der v3-Spezifikation ist das Deaktivieren dieser Features nicht erforderlich, da Löschvektoren und Zeilenverfolgung unterstützt werden. Siehe "Apache Iceberg v3-Features verwenden".
Note
Das Standardverhalten wendet kein Clustering auf zuvor geschriebene Daten an. Um die Neuclusterung zu erzwingen, verwenden OPTIMIZE FULL oder OPTIMIZE FULL WHERE <predicate>. Siehe "Neuclustering erzwingen".
Konvertieren einer partitionierten Tabelle in flüssigen Clustering
Verwenden REPLACE PARTITIONED BY WITH CLUSTER BYALTER TABLE Sie in Databricks Runtime 18.1 und höher eine vorhandene partitionierte Delta Lake-Tabelle in flüssigen Clustering. Die Konvertierung minimiert die Ausfallzeit von Lese- und Schreibzugriff und unterstützt sowohl externe als auch verwaltete Tabellen. Nach der Konvertierung unterstützt die Tabelle Lesevorgänge mit Databricks Runtime 13.3 LTS und höher.
Note
Für verwaltete Iceberg-Tabellen ist die Konvertierung nicht erforderlich, da diese Tabellen Partitionsdefinitionen als liquide Clusteringschlüssel verwenden. Wenn Sie den Konvertierungsbefehl ausführen, wird ein Fehler ausgelöst.
Zu den Vorteilen der Umwandlung von partitionierten Tabellen in flüssigen Clustering gehören:
- Leistungsverbesserungen für Tabellen, die unter schlechter Datenüberspringung oder Überpartitionierung leiden.
- Automatische Leistungsverbesserungen mithilfe von
CLUSTER BY AUTOTabellen mit häufig ändernden Abfragemustern. - Clusterspalten sind flexibel und einfach zu ändern, während die Partitionierung starr und schwer zu ändern ist.
- Reduzierte Schreibkonflikte, da Tabellen mit flüssigem Clustering die Parallelität auf Zeilenebene ermöglichen. Siehe Zeilenebene-Konkurrenz.
Syntax
ALTER TABLE <table_name>
REPLACE PARTITIONED BY WITH CLUSTER BY [( <clustering_columns> ) | AUTO]
Die CLUSTER BY Klausel unterstützt die folgenden Optionen:
-
( <clustering_columns> ): Gibt neue Clusterspalten an. Databricks empfiehlt, die neuen Clusteringspalten ähnlich wie die ursprünglichen Partitionsspalten beizubehalten. Die Verwendung sehr unterschiedlicher Spalten löst einen großen Reclustering-Vorgang bei der erstenOPTIMIZEAusführung aus. -
AUTO: Verwendet die aktuellen Partitionsspalten als anfängliche Clusterspalten und ermöglicht eine anpassungsfähige Optimierung im Laufe der Zeit. Nur für verwaltete Tabellen im Unity-Katalog verfügbar. Siehe Automatische Flüssigkeitsclusterung. - Es wurden keine Optionen angegeben: Verwendet die aktuellen Partitionsspalten als neue Clusterspalten.
Anleitungen zum Auswählen von Clusteringschlüsseln bei der Migration aus partitionierten Tabellen finden Sie unter Migrieren von Partitionierung oder Z-Reihenfolge.
Beispiele
Gehen Sie wie folgt vor, um clustern sie auf unterschiedlichen Spalten als die ursprünglichen Partitionen zu gruppieren, z. B. für eine tabelle, die partitioniert ist (year, month, day):
ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (day, id);
OPTIMIZE t1;
Note
Um von der Änderung von Clusterspalten zu profitieren, müssen Sie ausführen OPTIMIZE.
Gehen Sie wie folgt vor, um die automatische Flüssigkeitsclusterung zu verwenden und mit den aktuellen Partitionsspalten zu beginnen:
ALTER TABLE t2 REPLACE PARTITIONED BY WITH CLUSTER BY AUTO;
Gehen Sie wie folgt vor, um die aktuellen Partitionsspalten als Clusterspalten beizubehalten:
ALTER TABLE t3 REPLACE PARTITIONED BY WITH CLUSTER BY;
Behandeln gleichzeitiger Lese- und Schreibvorgänge während der Konvertierung
Nach der Konvertierung werden Databricks Runtime 13.3 LTS und höher für Lese- und Schreibvorgänge unterstützt. Azure Databricks empfiehlt Databricks Runtime 15.4 LTS und höher für Workloads, die während der Konvertierung in die Tabelle lesen oder schreiben.
In der folgenden Tabelle erfahren Sie, wie Sie während der Konvertierung gleichzeitige Lese- und Schreibworkloads behandeln:
| Workload-Typ | Lesevorgänge während der Konvertierung | Schreibvorgänge während der Konvertierung |
|---|---|---|
| Batch | Keine Ausfallzeiten. Alle Databricks-Runtime-Versionen können die Tabelle während der Konvertierung lesen. | Keine Ausfallzeiten auf Databricks Runtime 15.4 und höher. Für Databricks Runtime 15.3 und unten empfiehlt Databricks, Workloads anzuhalten, bevor Sie Workloads konvertieren und dann nach Abschluss der Konvertierung neu starten. |
| Streaming |
Mit Schemanachverfolgung und Spaltenzuordnung: Starten Sie den Datenstrom neu, ohne commits zu verlieren. Ohne Schemanachverfolgung und Spaltenzuordnung: Der Datenstrom löst eine Ausnahme aus. Starten Sie mit einem neuen Prüfpunktspeicherort neu, und starten Sie die Version. Commits gehen nicht verloren. |
Starten Sie den Datenstrom neu, ohne dass Commits verloren gehen. |
Überprüfen oder Zurücksetzen einer Konvertierung
Führen Sie zum DESCRIBE EXTENDED Bestätigen der Konvertierung die neuen Clusterspalten aus. Führen Sie die Ausführung DESCRIBE HISTORY aus, um eine Reihe von Vorgängen REORG , einen UPGRADE PROTOCOL Vorgang und einen REPLACE PARTITIONED BY WITH CLUSTER BY Vorgang anzuzeigen.
Um eine Konvertierung zurückzugeben, verwenden Sie RESTORE diese, um zur vorherigen Version zurückzukehren. Alternativ können Sie die Tabelle mit REPLACE TABLE ... PARTITIONED BY (...) AS SELECT * FROM ...umschreiben.
Führen Sie die folgenden Befehle aus, um ein Rollback mithilfe RESTOREvon Rollbacks auszuführen:
ALTER TABLE my_table CLUSTER BY NONE;
ALTER TABLE my_table UNSET TBLPROPERTIES ('delta.liquid.hierarchicalClusteringColumns');
RESTORE TABLE my_table TO VERSION AS OF <version_number_before_conversion>;
Siehe RESTORE.
Konvertieren einer Tabelle, die durch eine Zeitstempelspalte partitioniert wird
Um eine Tabelle (t1) zu konvertieren, die von einer Zeitstempelspalte (timestamp_col) partitioniert wird und die Zeitstempelspalte als Clusterschlüssel verwendet, müssen Sie zusätzliche Konfigurationen festlegen:
SET spark.databricks.delta.liquidConversion.statsGeneration.enabled = false;
ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (timestamp_col, id);
ANALYZE TABLE t1 COMPUTE DELTA STATISTICS;
Wenn Sie versuchen, eine Zeitstempelpartitionsspalte ohne diese Konfigurationen in eine Clusterspalte zu konvertieren, löst der Befehl einen Fehler aus:
ALTER TABLE REPLACE PARTITIONED BY WITH CLUSTER BY cannot auto-generate stats on table with column event_ts due to unsupported type: timestamp. Disable stats auto-generation by setting 'spark.databricks.delta.liquidConversion.statsGeneration.enabled' to 'false' and retry the command again. SQLSTATE: 42000
Konvertierungseinschränkungen
Die folgenden Einschränkungen gelten für den Konvertierungsbefehl REPLACE PARTITIONED BY WITH CLUSTER BY :
- Streamingtabellen und materialisierte Ansichten, die in Lakeflow Spark Declarative Pipelines erstellt wurden, werden nicht unterstützt. Um liquid clustering zu verwenden, müssen Sie die Pipelinedefinition so aktualisieren, dass
CLUSTER BYsie anstelle vonPARTITIONED BY. - Tabellen, die die Delta-Freigabe mit partitionsfiltern verwenden, werden nicht unterstützt. Informationen zur Partitionsfilterung für die Delta-Freigabe finden Sie unter Angeben von Tabellenpartitionen, die freigegeben werden sollen.
Entfernen von Clusteringschlüsseln
Verwenden Sie die folgende Syntax, um Clusteringschlüssel zu entfernen:
ALTER TABLE table_name CLUSTER BY NONE;
Auswählen von Clusteringschlüssel
Wählen Sie Clusterschlüssel basierend auf den Spalten aus, die am häufigsten in Abfragefiltern verwendet werden. Die richtigen Schlüssel verbessern die Datensprung- und Abfrageleistung erheblich.
Tip
Databricks empfiehlt die Verwendung des automatischen Flüssigclusterings, um Clusteringschlüssel basierend auf Ihren Abfragemustern intelligent auszuwählen. Siehe Automatische Flüssigkeitsclusterung.
Wichtige Auswahlrichtlinien
Wenn Sie Clusterschlüssel manuell angeben, wählen Sie Spalten basierend auf den Spalten aus, die am häufigsten in Abfragefiltern verwendet werden. Sie können Clusteringschlüssel in beliebiger Reihenfolge definieren. Wenn zwei Spalten stark korreliert sind, müssen Sie nur einen davon als Clusterschlüssel einschließen.
Sie können bis zu vier Clusteringtasten angeben. Bei kleineren Tabellen (weniger als 10 TB) kann die Verwendung von mehr Clusteringschlüsseln beim Filtern nach einer einzelnen Spalte die Leistung beeinträchtigen. Beispielsweise führt das Filtern mit vier Schlüsseln schlechter aus als das Filtern mit zwei Tasten. Da die Tabellengröße jedoch zunimmt, wird dieser Leistungsunterschied für Einzelspaltenabfragen vernachlässigbar.
Clusterschlüssel müssen Spalten sein, für die Statistiken gesammelt wurden. Standardmäßig erfassen Delta Lake-Tabellen Statistiken für die ersten 32 Spalten. Siehe "Statistikspalten angeben".
Unterstützte Datentypen
Clustering unterstützt diese Datentypen für Clusteringschlüssel:
- Date
- Timestamp
- TimestampNTZ (Databricks Runtime 14.3 LTS und höher)
- String
- Integer (Ganzzahl), Long (Lang), Short (Kurz), Byte (Byte)
- Float, Double, Dezimal
Sie können mithilfe einer StructField Punktnotation gruppiert werden, z CLUSTER BY (struct_col.field). B. . Geschachtelte Strukturfelder werden für jede Tiefe unterstützt, z CLUSTER BY (struct_col.nested.field). B. . Der Datentyp des Felds muss eines der unterstützten Typen in der vorherigen Liste sein.
Sie können keines der folgenden Cluster verwenden:
- Komplexe Typen, z
StructType. B. ,MapTypeoderArrayType -
MapTypeundArrayTypeElemente, zmap_col['key']. B. , ,array_col[0]odermap_col.key.
Migrieren von der Partitionierung oder der Z-Reihenfolge
Von Bedeutung
Databricks empfiehlt, die automatische Konvertierung mit REPLACE PARTITIONED BY WITH CLUSTER BY Befehl zu verwenden. Siehe Konvertieren einer partitionierten Tabelle in flüssigen Clustering.
Wenn Sie eine vorhandene Tabelle konvertieren, sollten Sie die folgenden Empfehlungen berücksichtigen:
| Aktuelle Datenoptimierungstechnik | Empfehlung für Clusteringschlüssel |
|---|---|
| Hive-Partitionierung | Verwenden Sie Partitionsspalten als Clusteringschlüssel. |
| Z-Reihenfolge-Indizierung | Verwenden Sie ZORDER BY-Spalten als Clusteringschlüssel. |
| Partitionierung im Hive-Stil und Z-Reihenfolge | Verwenden Sie sowohl Partitionsspalten als auch ZORDER BY-Spalten als Clusteringschlüssel. |
| Generierte Spalten zur Verringerung der Kardinalität (z. B. Datum für einen Zeitstempel) | Verwenden Sie die ursprüngliche Spalte als Clusterschlüssel, und erstellen Sie keine generierte Spalte. |
Automatische Flüssigkeitsclusterung
In Databricks Runtime 15.4 LTS und höher können Sie die automatische Liquid Clustering für verwaltete Delta Lake-Tabellen im Unity-Katalog aktivieren. Für unity Catalog verwaltete Apache Iceberg v3-Tabellen erfordert die automatische Liquid Clustering Databricks Runtime 18.0 und höher. Die automatische Liquid Clustering ermöglicht Azure Databricks die intelligente Auswahl von Clusteringschlüsseln, um die Abfrageleistung mithilfe der CLUSTER BY AUTO Klausel zu optimieren.
Note
Automatische Flüssigclustering wird auch für materialisierte Ansichten und Streamingtabellen unterstützt, einschließlich Lakeflow Spark Declarative Pipelines und eigenständige Pipelines. Geben Sie in Ihrer Pipeline- oder SQL-Definition an CLUSTER BY AUTO .
Funktionsweise der automatischen Flüssigclusterung
Das automatische Flüssigclustering erfordert eine prädiktive Optimierung für automatische Schlüsselauswahl- und Clusteringvorgänge und wird asynchron ausgeführt. Siehe Prädiktive Optimierung für verwaltete Unity Catalog-Tabellen.
Automatische Flüssigkeitsclusterung wendet intelligente Optimierungen basierend auf Ihren Nutzungsmustern an:
- Abfrage-Workload-Analyse: Azure Databricks analysiert den historischen Abfrage-Workload der Tabelle und identifiziert die besten Kandidatenspalten für das Clustering.
- Passt sich an Änderungen an: Wenn sich Ihre Abfragemuster oder Datenverteilungen im Laufe der Zeit ändern, wählt die automatische Liquid Clustering neue Schlüssel aus, um die Leistung zu optimieren.
- Kostenbewusste Auswahl: Azure Databricks ändert Clusteringschlüssel nur, wenn die prognostizierten Kosteneinsparungen durch Verbesserungen beim Datenüberspringen die Kosten des Datenclusterings rechtfertigen.
Mögliche Gründe, warum bei der automatischen Flüssigkeitseinteilung keine Schlüssel ausgewählt werden können, sind:
- Die Tabelle ist zu klein, um vom Liquid-Clustering zu profitieren.
- Die Tabelle verfügt bereits über ein effektives Clusteringschema, entweder aus vorherigen manuellen Tasten oder einer natürlichen Einfügereihenfolge, die Abfragemustern entspricht.
- Die Tabelle enthält keine häufigen Abfragen.
- Sie verwenden databricks Runtime 15.4 LTS oder höher nicht.
Sie können automatische Liquid Clustering für alle verwalteten Tabellen des Unity-Katalogs anwenden, unabhängig von Daten- und Abfragemerkmalen. Die Heuristik entscheidet darüber, ob die Auswahl von Clusterschlüsseln kostenvorteilhaft ist.
Kompatibilität der Databricks-Runtime-Version
Sie können Tabellen mit aktivierter automatischer Clustering aus allen Databricks-Runtime-Versionen lesen oder schreiben, die flüssige Clustering unterstützen. Die intelligente Schlüsselauswahl basiert jedoch auf Metadaten, die in Databricks Runtime 15.4 LTS eingeführt wurden.
Verwenden Sie Databricks Runtime 15.4 LTS oder höher, um sicherzustellen, dass automatisch ausgewählte Schlüssel von all Ihren Workloads profitieren und dass diese Workloads beim Auswählen neuer Schlüssel berücksichtigt werden.
Aktivieren oder Deaktivieren der automatischen Flüssigclusterung
SQL
So erstellen Sie eine Tabelle mit automatischer Flüssigkeitsclusterung:
CREATE OR REPLACE TABLE table1 (column01 int, column02 string) CLUSTER BY AUTO;
So aktivieren Sie die automatische Flüssigkeitsclusterung auf einer vorhandenen Tabelle, einschließlich Tabellen mit manuell angegebenen Schlüsseln:
ALTER TABLE table1 CLUSTER BY AUTO;
Um anfängliche Clusterspaltenhinweise für die Tastenauswahl festzulegen, legen Sie die Clustertasten fest, und aktivieren Sie dann die automatische Clusterung:
ALTER TABLE table1 CLUSTER BY (c1, c2);
ALTER TABLE table1 CLUSTER BY AUTO;
Alternativ können Sie die Python-API verwenden, um Hinweise in einem einzelnen Vorgang festzulegen.
So deaktivieren Sie die automatische Flüssigkeitsclusterung:
ALTER TABLE table1 CLUSTER BY NONE;
So deaktivieren Sie die automatische Flüssigkeitsclusterung und geben Sie Clusterspalten an:
ALTER TABLE table1 CLUSTER BY (column01, column02);
Wenn für eine vorhandene Tabelle automatisches Liquid Clustering aktiviert ist, wird durch das Ausführen von CREATE OR REPLACE table_name ohne CLUSTER BY AUTO das automatische Clustering deaktiviert, und die Clusteringspalten werden nicht beibehalten. Um die automatische Clusterung von Flüssigkeiten und alle zuvor ausgewählten Spalten beizubehalten, fügen Sie CLUSTER BY AUTO in die replace-Anweisung ein. Mit CLUSTER BY AUTO nutzt die prädiktive Optimierung den historischen Abfrage-Workload der Tabelle, um die besten Clustering-Schlüssel zu ermitteln.
Python
Die Python-API ist in Databricks Runtime 16.4 und höher verfügbar. Sie können Python nur beim Erstellen oder Ersetzen einer Tabelle verwenden. Verwenden Sie SQL, um den clusterByAuto Status einer vorhandenen Tabelle zu ändern.
So erstellen Sie eine Tabelle mit automatischer Flüssigclusterung mit DataFrameWriter:
df = spark.read.table("table1")
df.write
.format("delta")
.option("clusterByAuto", "true")
.saveAsTable(...)
So legen Sie anfängliche Clusterspaltenhinweise für die Tastenauswahl mithilfe von DataFrameWriter:
df.write
.format("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option("clusterByAuto", "true")
.saveAsTable(...)
So erstellen Sie eine Tabelle mit automatischer Flüssigclusterung mit DataFrameWriterV2:
df.writeTo(...).using("delta")
.option("clusterByAuto", "true")
.create()
So legen Sie anfängliche Clusterspaltenhinweise für die Tastenauswahl mithilfe von DataFrameWriterV2:
df.writeTo(...).using("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option("clusterByAuto", "true")
.create()
So erstellen Sie eine Streamingtabelle mit automatischem Flüssigclustering:
spark.readStream.table("source_table")
.writeStream
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
So legen Sie anfängliche Clusterspaltenhinweise für die Schlüsselauswahl in einer Streamingtabelle fest:
spark.readStream.table("source_table")
.writeStream
.clusterBy("column1", "column2")
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Wenn Sie .clusterBy für Hinweise zur Cluster-Schlüsselauswahl zusammen mit .option('clusterByAuto', 'true') verwenden, ist das Verhalten wie folgt:
- Wenn hiermit zum ersten Mal automatisches Liquid Clustering festgelegt wird, werden die Clustering-Spalten auf die in
.clusterByangegebenen Spalten festgelegt. - Wenn es sich um eine vorhandene Tabelle mit aktivierter automatischer Flüssigkeitsclusterung handelt, wird ein
.clusterByHinweis nur einmal akzeptiert. Die angegebenen.clusterBySpalten werden beispielsweise nur festgelegt, wenn für die Tabelle keine Clusterspalten festgelegt sind.
Von Bedeutung
Bei Verwendung von DataFrame-APIs kann die clusterByAuto Option nur bei Verwendung des overwrite Modus festgelegt werden. Sie können clusterByAuto nicht festlegen, wenn Sie den append-Modus verwenden. Diese Einschränkung entspricht dem manuellen Festlegen von Clusterspalten. Sie können Clustering-Einstellungen nur während der Tabellenerstellung oder bei Ersetzungsvorgängen im Modus overwrite konfigurieren.
Wenn Sie den clusterByAuto Status einer vorhandenen Tabelle beim Anfügen von Daten ändern möchten, verwenden Sie SQL-Befehle ALTER TABLE , um die Clusterkonfiguration getrennt von Ihren Datenschreibvorgängen zu ändern.
Überprüfen, ob die automatische Clustering aktiviert ist
Um zu überprüfen, ob eine Tabelle die automatische Flüssigkeitsclusterung aktiviert hat, verwenden DESCRIBE TABLE oder SHOW TBLPROPERTIES.
Wenn das automatische Liquid Clustering aktiviert ist, wird die clusterByAuto-Eigenschaft auf true festgelegt. Die clusteringColumns Eigenschaft zeigt die aktuellen Clusterspalten an, die automatisch oder manuell ausgewählt wurden.
Einschränkungen
Automatische Flüssigkeitsclustering ist für verwaltete Apache Iceberg v2-Tabellen nicht verfügbar. Sie wird für verwaltete Apache Iceberg v3-Tabellen in Databricks Runtime 18.0 und höher unterstützt.
Schreiben von Daten in eine gruppierte Tabelle
Um in eine gruppierte Delta Lake-Tabelle zu schreiben, müssen Sie einen Delta Writer-Client verwenden, der alle Features der Delta-Schreibprotokolltabelle unterstützt, die von liquid clustering verwendet werden. Um in eine gruppierte Iceberg-Tabelle zu schreiben, können Sie die Iceberg REST Catalog-API des Unity-Katalogs verwenden. In Azure Databricks müssen Sie Databricks Runtime 13.3 LTS und höher verwenden.
Operationen, die das Clustering während des Schreibens unterstützen
Die folgenden Vorgänge gruppieren Daten beim Schreiben:
-
INSERT INTO-Vorgänge -
CTAS- undRTAS-Anweisungen -
COPY INTOaus dem Parquet-Format spark.write.mode("append")
Schwellenwerte für Größen beim Clustering
Das Clustering bei Schreibvorgängen wird nur ausgelöst, wenn Daten in der Transaktion einen Größenschwellenwert erreichen. Diese Schwellenwerte variieren je nach Anzahl der Clusterspalten und sind für verwaltete Unity-Katalogtabellen niedriger als andere Delta Lake-Tabellen.
| Anzahl der Clusterspalten | Schwellenwertgröße für verwaltete Tabellen im Unity Catalog | Schwellenwertgröße für andere Delta Lake-Tabellen |
|---|---|---|
| 1 | 64 MB | 256 MB |
| 2 | 256 MB | 1 GB |
| 3 | 512 MB | 2 GB |
| 4 | 1 GB | 4 GB |
Da nicht alle Vorgänge Liquid Clustering anwenden, empfiehlt Databricks, OPTIMIZE häufig auszuführen, um sicherzustellen, dass das Clustering für alle Daten effizient erfolgt.
Streaming Workloads
Strukturierte Streaming-Arbeitslasten unterstützen das Clusterverfahren beim Schreiben, wenn Sie die Spark-Konfiguration spark.databricks.delta.liquid.eagerClustering.streaming.enabled auf true setzen. Das Clustering für diese Workloads wird nur ausgelöst, wenn mindestens eine der letzten fünf Streamingupdates einen Größenschwellenwert aus der obigen Tabelle überschreitet.
Auslösen von Clustering
Die Predictive Optimization führt automatisch OPTIMIZE-Befehle für aktivierte Tabellen aus. Siehe Prädiktive Optimierung für verwaltete Unity Catalog-Tabellen. Bei Verwendung der Predictive Optimization empfiehlt Databricks, alle geplanten OPTIMIZE Aufträge zu deaktivieren.
Zum Auslösen des Clusterings müssen Sie Databricks Runtime 13.3 LTS oder höher verwenden. Databricks empfiehlt Databricks Runtime 17.3 LTS und höher für eine schnellere OPTIMIZE Leistung in großen Tabellen. Verwenden Sie den OPTIMIZE Befehl in Ihrer Tabelle:
OPTIMIZE table_name;
Flüssiges Clustering ist inkrementell, d. h., dass OPTIMIZE daten nur nach Bedarf neu geschrieben werden, um Daten aufzunehmen, die Clustering benötigen.
OPTIMIZE Datendateien mit Clusterschlüsseln, die nicht mit den gruppierten Daten übereinstimmen, werden nicht umgeschrieben. Siehe "Neuclustering erzwingen".
Wenn Sie keine predictive Optimierung verwenden, empfiehlt Databricks die Planung regulärer OPTIMIZE Aufträge an Clusterdaten. Für Tabellen mit vielen Updates oder Einfügungen empfiehlt Databricks, alle ein bis zwei Stunden einen OPTIMIZE-Auftrag zu planen. Da Liquid Clustering inkrementell ist, werden die meisten OPTIMIZE-Aufträge für gruppierte Tabellen schnell ausgeführt.
Neuklasterung erzwingen
In Databricks Runtime 16.4 LTS und höher können Sie die Neuclusterung aller Datensätze in einer Tabelle mit der folgenden Syntax erzwingen:
OPTIMIZE table_name FULL;
Von Bedeutung
Beim Ausführen OPTIMIZE FULL werden alle vorhandenen Daten nach Bedarf neu gruppiert. Bei großen Tabellen, die zuvor nicht in den angegebenen Schlüsseln gruppiert wurden, kann dieser Vorgang Stunden dauern.
Führen Sie OPTIMIZE FULL aus, wenn Sie das Clustering zum ersten Mal aktivieren oder Clusteringschlüssel ändern. Wenn Sie zuvor OPTIMIZE FULL ausgeführt haben und keine Clusterschlüssel geändert wurden, wird OPTIMIZE FULL mit OPTIMIZEidentisch ausgeführt. In diesem Szenario verwendet OPTIMIZE einen inkrementellen Ansatz und schreibt nur die Dateien neu, die zuvor noch nicht komprimiert wurden. Verwenden Sie immer OPTIMIZE FULL, um sicherzustellen, dass das Datenlayout die aktuellen Clusteringschlüssel widerspiegelt.
Partielles Neuclustern
In der Databricks Runtime 18.1 und höher können Sie die Neuclusterung für eine Teilmenge von Datensätzen mit OPTIMIZE FULL WHERE <predicate> erzwingen. Eine Datei wird eingeschlossen, wenn ein Teil seines Bereichs mit dem Prädikat überlappt. Siehe Parameter.
OPTIMIZE events FULL WHERE event_date >= '2025-01-01';
Lesen von Daten aus einer gruppierten Tabelle
Sie können Daten in einer gruppierten Delta Lake-Tabelle lesen, indem Sie einen beliebigen Delta Lake-Client verwenden, der das Lesen von Löschvektoren unterstützt. Mithilfe der Iceberg REST-Katalog-API können Sie Daten in einer gruppierten Iceberg-Tabelle lesen. Das Flüssige Clustering verbessert die Abfrageleistung durch automatisches Überspringen von Daten beim Filtern von Clusterschlüsseln.
SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";
Verwalten von Clusteringschlüsseln
Hier erfahren Sie, wie eine Tabelle gruppiert ist
Mithilfe von DESCRIBE-Befehlen können Sie die Clusteringschlüssel für eine Tabelle anzeigen, wie in den folgenden Beispielen gezeigt:
DESCRIBE TABLE table_name;
DESCRIBE DETAIL table_name;
Ändern von Clusteringschlüsseln
Sie können Clusteringschlüssel für eine Tabelle jederzeit ändern, indem Sie einen ALTER TABLE-Befehl ausführen, wie im folgenden Beispiel gezeigt:
ALTER TABLE table_name CLUSTER BY (new_column1, new_column2);
Wenn Sie Clusteringschlüssel ändern, verwenden nachfolgende OPTIMIZE- und Schreibvorgänge den neuen Clusteringansatz, vorhandene Daten werden jedoch nicht neu geschrieben. Um vorhandene Daten mit den aktualisierten Clusteringschlüsseln neu zu schreiben, siehe "Erzwingen des Neuclusterings".
Sie können das Clustering auch deaktivieren, indem Sie die Schlüssel wie im folgenden Beispiel auf NONE festlegen:
ALTER TABLE table_name CLUSTER BY NONE;
Durch Festlegen von Clusterschlüsseln werden NONE gruppierte Daten nicht neu geschrieben, sondern verhindert, dass zukünftige OPTIMIZE Vorgänge Clusterschlüssel verwenden.
Verwendung von Liquid Clustering durch eine externe Engine
Sie können Liquid-Clustering für verwaltete Iceberg-Tabellen von externen Iceberg-Modulen aktivieren. Zum Aktivieren des Flüssigclusterings geben Sie beim Erstellen einer Tabelle Partitionsspalten an. Unity Catalog interpretiert die Partitionen als Clusterschlüssel. Führen Sie beispielsweise den folgenden Befehl in OSS Spark aus:
CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY c1;
So deaktivieren Sie flüssigen Clustering:
ALTER TABLE main.schema.icebergTable DROP PARTITION FIELD c2;
So ändern Sie Clusteringschlüssel mithilfe der Iceberg-Partitionsentwicklung:
ALTER TABLE main.schema.icebergTable ADD PARTITION FIELD c2;
Wenn Sie eine Partition mit einer Buckettransformation angeben, ignoriert Unity Catalog den Ausdruck und verwendet die Spalte als Cluster-Schlüssel.
CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY (bucket(c1, 10));
Kompatibilität für Tabellen mit Liquid Clustering
Liquid Clustering verwendet Delta Lake-Tabellenfeatures, die bestimmte Databricks-Runtime-Versionen zum Lesen und Schreiben erfordern. Tabellen, die mit flüssigem Clustering in Databricks Runtime 14.3 LTS und höher erstellt wurden, verwenden standardmäßig den Prüfpunkt V2. Sie können Tabellen mit Prüfpunkt V2 in Databricks Runtime 13.3 LTS und höher lesen und schreiben. Siehe Prüfpunkt V2.
Um Nutzer bei der Verwendung von Databricks Runtime von 12.2 LTS auf 13.2 zu unterstützen, deaktivieren Sie den Prüfpunkt V2 und führen Sie ein Downgrade des Tabellenprotokolls durch. Siehe Downgrade auf klassisch.
Außerkraftsetzen der standardmäßigen Featureaktivierung (optional)
Sie können die Standardmäßige Aktivierung der Delta Lake-Tabellenfunktion während der Aktivierung der Flüssigclusterung außer Kraft setzen. Dadurch werden Upgrades der Lese- und Schreibprotokolle verhindert, die diesen Tabellenfeatures zugeordnet sind. Sie müssen über eine vorhandene Tabelle verfügen, um die folgenden Schritte auszuführen:
Dient
ALTER TABLEzum Festlegen der Tabelleneigenschaft, die ein oder mehrere Features deaktiviert. Führen Sie z. B. zum Deaktivieren von Löschvektoren Folgendes aus:ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);Aktivieren Sie Liquid Clustering auf der Tabelle, indem Sie Folgendes ausführen:
ALTER TABLE <table_name> CLUSTER BY (<clustering_columns>)
Die folgende Tabelle enthält Informationen zu den Delta-Features, die Sie außer Kraft setzen können und wie sich die Aktivierung auf die Kompatibilität mit Databricks-Runtime-Versionen auswirkt:
| Delta-Funktion | Laufzeitkompatibilität | Eigenschaft zum Außerkraftsetzen der Aktivierung | Effekte auf flüssigen Clustern, wenn sie deaktiviert sind |
|---|---|---|---|
| Vektoren löschen | Lese- und Schreibvorgänge erfordern Databricks Runtime 12.2 LTS und höher. | 'delta.enableDeletionVectors' = false |
Durch das Deaktivieren von Löschvektoren wird auch die Parallelität auf Zeilenebene deaktiviert, wodurch Transaktionen und Clusteringvorgänge wahrscheinlicher in Konflikt geraten. Siehe Zeilenebene-Konkurrenz.DELETE, MERGE und UPDATE Befehle werden vielleicht langsamer ausgeführt. |
| Zeilenverfolgung | Schreibvorgänge erfordern Databricks Runtime 13.3 LTS und höher. Kann aus jeder Databricks-Runtime-Version gelesen werden. | 'delta.enableRowTracking' = false |
Wenn Sie die Zeilennachverfolgung deaktivieren, wird auch die Parallelität auf Zeilenebene deaktiviert, wodurch Transaktionen und Clusteringvorgänge wahrscheinlicher in Konflikt geraten. Siehe Zeilenebene-Konkurrenz. |
| Prüfpunkt V2 | Lese- und Schreibvorgänge erfordern Databricks Runtime 13.3 LTS und höher. | 'delta.checkpointPolicy' = 'classic' |
Keine Auswirkung auf das Flüssigclusteringverhalten. Siehe Prüfpunkt V2. |
Einschränkungen
- Databricks Runtime 15.1 und darunter: Das Clustering beim Schreiben unterstützt keine Quellabfragen, die Filter, Verknüpfungen oder Aggregationen enthalten.
- Databricks Runtime 15.4 LTS und niedriger: Sie können keine Tabelle mit aktivem Liquid Clustering mithilfe von strukturiertem Streaming erstellen. Sie können strukturiertes Streaming verwenden, um Daten in eine vorhandene Tabelle mit aktivierter Liquid Clustering-Funktion zu schreiben.
-
Apache Iceberg v2: Parallelität auf Zeilenebene wird für verwaltete Apache Iceberg v2-Tabellen nicht unterstützt, da Löschvektoren und Zeilenverfolgung nicht unterstützt werden.
- Die Parallelität auf Zeilenebene wird in verwalteten Apache Iceberg v3-Tabellen unterstützt, da die v3-Spezifikation Löschvektoren und Zeilenverfolgung unterstützt. Siehe "Apache Iceberg v3-Features verwenden".