Verwenden von Liquid-Clustering für Tabellen

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 ist für Delta-Lake-Tabellen mit Databricks Runtime 15.4 LTS und höher allgemein verfügbar und für Apache-Iceberg-Tabellen mit Databricks Runtime 16.4 LTS und höher als Public Preview verfügbar. Databricks empfiehlt die Verwendung der neuesten Databricks Runtime für die beste Leistung.

Verwaltete Apache Iceberg v3-Tabellen unterstützen auch Löschvektoren, Zeilenverfolgung, Parallelität auf Zeilenebene und automatisches Liquid Clustering. 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 aktiviertem Liquid Clustering mithilfe von Schreibvorgängen mit Structured Streaming erstellen, wie in den folgenden Beispielen:

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 aktiviertem Liquid Clustering verwenden Delta-Writer-Version 7 und Delta-Reader-Version 3. Delta-Clients, die diese Protokolle nicht unterstützen, können diese Tabellen nicht lesen. Sie können die Versionen des Tabellenprotokolls nicht herabstufen. Siehe Delta Lake Featurekompatibilität und Protokolle.

Zum Überschreiben der standardmäßigen Feature-Aktivierung, z. B. von Löschvektoren, siehe Standardmäßige Feature-Aktivierung überschreiben (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 bei einer vorhandenen Tabelle Liquid Clustering 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".

Eine partitionierte Tabelle in Liquid Clustering konvertieren

In Databricks Runtime 18.1 und höher verwenden Sie REPLACE PARTITIONED BY WITH CLUSTER BY in einer ALTER TABLE-Anweisung, um eine vorhandene partitionierte Delta-Lake-Tabelle für Liquid Clustering zu konvertieren. 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 durch die Verwendung von CLUSTER BY AUTO für Tabellen mit sich 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 Clustering-Spalten an. Databricks empfiehlt, die neuen Clusteringspalten ähnlich wie die ursprünglichen Partitionsspalten beizubehalten. Wenn sehr unterschiedliche Spalten verwendet werden, wird beim ersten OPTIMIZE-Durchlauf ein umfangreicher Reclustering-Vorgang ausgelöst.
  • AUTO: Verwendet die aktuellen Partitionsspalten als anfängliche Clustering-Spalten und ermöglicht, dass sich die prädiktive Optimierung im Zeitverlauf anpasst. 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 nach anderen Spalten als den ursprünglichen Partitionierungsspalten zu clustern, z. B. bei einer Tabelle, die nach (year, month, day) partitioniert ist:

ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (day, id);
OPTIMIZE t1;

Note

Um durch das Ändern von Clustering-Spalten zu profitieren, müssen Sie OPTIMIZE ausführen.

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 niedriger empfiehlt Databricks, Workloads vor der Konvertierung anzuhalten und sie nach Abschluss der Konvertierung wieder zu starten.
Streaming Mit Schemaverfolgung und Spaltenzuordnung: Starten Sie den Stream neu, ohne Commits zu verlieren.
Ohne Schemanachverfolgung und Spaltenzuordnung: Der Datenstrom löst eine Ausnahme aus. Mit einem neuen Checkpoint-Speicherort und einer neuen Startversion neu starten. Commits gehen nicht verloren.
Starten Sie den Datenstrom neu, ohne dass Commits verloren gehen.

Überprüfen oder Zurücksetzen einer Konvertierung

Um die Konvertierung zu bestätigen, führen Sie DESCRIBE EXTENDED aus, um die neuen Clustering-Spalten anzuzeigen. Führen Sie DESCRIBE HISTORY aus, um eine Reihe von REORG-Vorgängen, einen UPGRADE PROTOCOL-Vorgang und einen REPLACE PARTITIONED BY WITH CLUSTER BY-Vorgang anzuzeigen.

Um eine Konvertierung rückgängig zu machen, verwenden Sie RESTORE, um zur vorherigen Version zurückzukehren. Alternativ können Sie die Tabelle mit REPLACE TABLE ... PARTITIONED BY (...) AS SELECT * FROM ...umschreiben.

Um mithilfe von RESTORE ein Rollback durchzuführen, führen Sie die folgenden Befehle aus:

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 Definition der Pipeline so aktualisieren, dass CLUSTER BY anstelle von PARTITIONED BY verwendet wird.
  • Tabellen, die Delta Sharing mit Partitionsfilterung verwenden, werden nicht unterstützt. Informationen zur Partitionsfilterung für Delta Sharing finden Sie unter Tabellenpartitionen zum Teilen angeben.

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 das Überspringen von Daten und die 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 nach einem StructField mithilfe der Punktnotation gruppieren, z. B. CLUSTER BY (struct_col.field). Geschachtelte Strukturfelder werden in beliebiger Tiefe unterstützt, z. B. CLUSTER BY (struct_col.nested.field). Der Datentyp des Felds muss eines der unterstützten Typen in der vorherigen Liste sein.

Sie können nach keinem der folgenden Elemente gruppieren:

  • Komplexe Typen, wie StructType, MapType oder ArrayType
  • MapType- und ArrayType-Elemente, wie z. B. map_col['key'], array_col[0] oder map_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 Eine partitionierte Tabelle in Liquid Clustering konvertieren.

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 automatisches Liquid Clustering für von Unity Catalog verwaltete Delta Lake-Tabellen aktivieren. Für von Unity Catalog verwaltete Apache Iceberg v3-Tabellen ist automatisches Liquid Clustering nur mit Databricks Runtime 18.0 oder höher verfügbar. 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

Automatisches Liquid Clustering wird auch für materialisierte Ansichten und Streaming-Tabellen unterstützt, einschließlich Lakeflow Spark Declarative Pipelines und eigenständiger 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 nicht Databricks Runtime 15.4 LTS oder höher.

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 Hinweise für Clustering-Spalten bei der Schlüsselauswahl festzulegen, legen Sie die Clustering-Schlüssel fest und aktivieren Sie dann das automatische Clustering:

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 mithilfe von DataFrameWriter anfängliche Hinweise für Clusterspalten zur Schlüsselauswahl fest:

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 mithilfe von DataFrameWriterV2 anfängliche Hinweise für Clusterspalten zur Schlüsselauswahl fest:

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 .clusterBy angegebenen Spalten festgelegt.
  • Wenn es sich um eine vorhandene Tabelle mit aktivierter automatischer Flüssigkeitsclusterung handelt, wird ein .clusterBy Hinweis nur einmal akzeptiert. Die angegebenen .clusterBy Spalten 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

Automatisches Liquid Clustering 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- und RTAS-Anweisungen
  • COPY INTO aus 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 prädiktive Optimierung verwenden, empfiehlt Databricks das Planen regelmäßiger OPTIMIZE Aufträge zum Clustern von Daten. 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:

  1. Verwenden Sie ALTER TABLE, um die Tabelleneigenschaft festzulegen, die eine oder mehrere Funktionen deaktiviert. Führen Sie z. B. zum Deaktivieren von Löschvektoren Folgendes aus:

    ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);
    
  2. 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".