Teilen über


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.

Important

Liquid-Clustering ist generell für Delta Lake-Tabellen und in der Public Preview für verwaltete Apache Iceberg-Tabellen verfügbar. Für Delta Lake-Tabellen ist die GA-Unterstützung mit Databricks Runtime 15.2 und höher verfügbar. Databricks empfiehlt die Verwendung der neuesten Databricks Runtime für die beste Leistung. Für Apache Iceberg-Tabellen ist Databricks Runtime 16.4 LTS und höher erforderlich.

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:

  • Tabellen, die häufig nach Spalten mit hoher Kardinalität gefiltert werden.
  • Tabellen, die in der Datenverteilung schief sind.
  • Tabellen, die schnell wachsen und Wartungs- und Optimierungsaufwand erfordern.
  • Tabellen mit gleichzeitigen Schreibanforderungen.
  • Tabellen mit Zugriffsmustern, die sich im Laufe der Zeit ändern.
  • Tabellen, in denen ein typischer Partitionsschlüssel die Tabelle mit zu vielen oder zu wenigen Partitionen hinterlassen könnte.

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.2 und höher können Sie DataFrame-APIs und DeltaTable-API in Python oder Scala verwenden, um flüssiges Clustering für Delta Lake-Tabellen zu aktivieren.

SQL

-- Create an empty Delta table with clustering on col0
CREATE TABLE table1(col0 INT, col1 string) CLUSTER BY (col0);

-- Create table from existing data with clustering
-- Note: CLUSTER BY must appear after table name, not in SELECT clause
CREATE TABLE table2 CLUSTER BY (col0)
AS SELECT * FROM table1;

-- Copy table structure including clustering configuration
CREATE TABLE table3 LIKE table1;

Python

# Create an empty Delta table with clustering on col0
(DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")  # Single clustering key
  .execute())

# Create clustered table from existing DataFrame
df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")

# Alternative: DataFrameWriterV2 API (:re[DBR] 14.2+)
df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()

Scala

// Create an empty Delta table with clustering on col0
DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute()

// Create clustered table from existing DataFrame
val df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")

// Alternative: DataFrameWriterV2 API (:re[DBR] 14.2+)
val df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()

Important

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.

In Databricks Runtime 16.0 und höher können Sie Tabellen mit Liquid Clustering erstellen, die durch strukturierte Streaming-Schreibvorgänge aktiviert werden. Databricks empfiehlt die Verwendung von Databricks Runtime 16.4 und höher für die beste Leistung, 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")

Warning

Delta-Tabellen mit aktivierter 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 Protokollversionen von Tabellen nicht downgraden. Siehe Delta Lake Featurekompatibilität und Protokolle.

Informationen zum Überschreiben der standardmäßigen Feature-Aktivierung (z. B. Löschvektoren) finden Sie unter Außerkraftsetzen der standardmäßigen Feature-Aktivierung (optional).

Für vorhandene Tabellen aktivieren

Aktivieren Sie liquid clustering für eine vorhandene nicht partitionierte Delta-Tabelle mit der folgenden Syntax:

-- Alter an existing table
ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)

Für Apache Iceberg müssen Sie Löschvektoren und Zeilen-IDs explizit deaktivieren, wenn Sie flüssigen Clustering auf einer vorhandenen verwalteten Iceberg-Tabelle aktivieren.

Note

Das Standardverhalten wendet kein Clustering auf zuvor geschriebene Daten an. Um die Neuclusterung für alle Datensätze zu erzwingen, müssen Sie OPTIMIZE FULLverwenden. Weitere Informationen finden Sie unter Erzwingen eines erneuten Clusterings für alle Datensätze.

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

Tipp

Databricks empfiehlt die Verwendung der automatischen flüssigen Clusterung für unterstützte Tabellen, die clustering keys basierend auf Ihren Abfragemustern intelligent auswählt. 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 (unter 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 werden für die ersten 32 Spalten in einer Delta-Tabelle Statistiken erfasst. Weitere Informationen finden Sie unter Angeben von Delta-Statistikspalten.

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

Migrieren von der Partitionierung oder der Z-Reihenfolge

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 das automatische Liquid Clustering für verwaltete Delta-Tabellen im Unity-Katalog aktivieren. 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.

Funktionsweise der automatischen Flüssigclusterung

Automatische Flüssigkeitsclusterung bietet eine intelligente Optimierung basierend auf Ihren Nutzungsmustern:

  • Erfordert eine vorausschauende Optimierung: Automatische Schlüsselauswahl und Clusteringvorgänge werden asynchron als Wartungsvorgang ausgeführt. Siehe Prädiktive Optimierung für verwaltete Unity Catalog-Tabellen.
  • Analysiert die Abfragearbeitsauslastung: Azure Databricks analysiert die historische Abfrageauslastung der Tabelle und identifiziert die besten Kandidatenspalten für 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

Verwenden Sie die folgende Syntax, um die automatische Flüssigclusterung für eine neue oder vorhandene Tabelle zu aktivieren oder zu deaktivieren:

SQL

-- Create an empty table.
CREATE OR REPLACE TABLE table1(column01 int, column02 string) CLUSTER BY AUTO;

-- Enable automatic liquid clustering on an existing table,
-- including tables that previously had manually specified keys.
ALTER TABLE table1 CLUSTER BY AUTO;

-- Disable automatic liquid clustering on an existing table.
ALTER TABLE table1 CLUSTER BY NONE;

-- Disable automatic liquid clustering by setting the clustering keys
-- to chosen clustering columns or new columns.
ALTER TABLE table1 CLUSTER BY (column01, column02);

Wenn Sie CREATE OR REPLACE table_name ausführen, ohne CLUSTER BY AUTO anzugeben, und die Tabelle bereits existiert und das automatische Liquid Clustering aktiviert ist, wird die AUTO-Einstellung deaktiviert und die Clusterspalten werden nicht beibehalten. Um die automatische Flüssigkeitsclusterung und alle zuvor ausgewählten Clusterspalten beizubehalten, schließen Sie CLUSTER BY AUTO in die Ersetzen-Anweisung ein. Wenn sie beibehalten wird, nutzt die predictive Optimierung die historische Abfragearbeitslast der Tabelle, um die besten Clusteringschlüssel zu identifizieren.

Python

df = spark.read.table("table1")
df.write
  .format("delta")
  .option(“clusterByAuto”, “true”)
  .saveAsTable(...)

# Set clustering columns and auto to provide a hint for initial selection
df.write
  .format("delta")
  .clusterBy("clusteringColumn1", "clusteringColumn2")
  .option("clusterByAuto", "true")
  .saveAsTable(...)

# Using DataFrameWriterV2
df.writeTo(...).using("delta")
  .option("clusterByAuto", "true")
  .create()

# Set clustering columns and auto to provide a hint for initial selection
df.writeTo(...).using("delta")
  .clusterBy("clusteringColumn1", "clusteringColumn2")
  .option("clusterByAuto", "true")
  .create()

# Set clusterByAuto for streaming tables
spark.readStream.table("source_table")
  .writeStream
  .option("clusterByAuto", "true")
  .option("checkpointLocation", checkpointPath)
  .toTable("target_table")

# Specify a hint for clustering columns with both auto and columns
spark.readStream.table("source_table")
  .writeStream
 .clusterBy("column1", "column2")
  .option("clusterByAuto", "true")
  .option("checkpointLocation", checkpointPath)
  .toTable("target_table")

Die Python-API ist in Databricks Runtime 16.4 und höher verfügbar. Wenn Sie .clusterBy zusammen mit .option('clusterByAuto', 'true) verwenden, lautet das Verhalten wie folgt:

  • Wenn dadurch die automatische Flüssigkeitsclusterung zum ersten Mal festgelegt wird, wird die manuelle Eingabe immer beachtet und die Clusterspalten in .clusterBy werden festgelegt.
  • Wenn dies bereits eine Tabelle mit automatischem fließendem Clustering ist, kann ein Hinweis mit .clusterBy einmal akzeptiert werden. Die angegebenen .clusterBy Spalten werden beispielsweise nur festgelegt, wenn die Tabelle bereits keine Clusterspalten festgelegt hat.

Sie können Python nur beim Erstellen oder Ersetzen einer Tabelle verwenden. Verwenden Sie SQL, um den clusterByAuto Status einer vorhandenen Tabelle zu ändern.

Important

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. Clusteringeinstellungen können nur während der Tabellenerstellung oder beim Ersetzungsvorgang im overwrite Modus konfiguriert werden.

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.

Limitations

Automatische Flüssigkeitsclusterung ist für Apache Iceberg nicht verfügbar.

Schreiben von Daten in eine gruppierte Tabelle

Um in eine gruppierte Delta-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 Catalogtabellen niedriger als andere Delta-Tabellen.

Anzahl der Clusterspalten Schwellenwertgröße für verwaltete Tabellen im Unity Catalog Schwellenwertgröße für andere Delta-Tabellen
1 64 MB 256 MB
2 256 MB 1 GB
3 512 MB 2 GB
4 1 GB 4GB

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.2 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 werden nicht mit Clusterschlüsseln neu geschrieben, die nicht mit den gruppierten Daten übereinstimmen.

Wenn Sie keine prädiktive Optimierung verwenden, empfiehlt Databricks, regelmäßige OPTIMIZE Aufträge zu planen, um Daten zu clustern. 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.

Erzwingen der Neuclusterung für alle Datensätze

In Databricks Runtime 16.0 und höher können Sie die Neuclusterung aller Datensätze in einer Tabelle mit der folgenden Syntax erzwingen:

OPTIMIZE table_name FULL;

Important

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.

Lesen von Daten aus einer gruppierten Tabelle

Sie können Daten in einer gruppierten Delta-Tabelle mit einem beliebigen Delta Lake-Client lesen, 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.

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;

Sie können flüssigen Clustering deaktivieren:

ALTER TABLE main.schema.icebergTable DROP PARTITION FIELD c2;

Sie können Clusteringschlüssel mithilfe der Iceberg-Partitionsentwicklung ändern:

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-Tabellenfeatures, die bestimmte Databricks-Runtime-Versionen zum Lesen und Schreiben erfordern. Tabellen, die mit Liquid Clustering in Databricks Runtime 14.1 und höher erstellt wurden, verwenden standardmäßig v2-Prüfpunkte. Sie können Tabellen mit v2-Prüfpunkten in Databricks Runtime 13.3 LTS und höher lesen und schreiben.

Sie können v2-Prüfpunkte deaktivieren und Tabellenprotokolle herabstufen, um Tabellen mit Liquid Clustering in Databricks Runtime 12.2 LTS und höher zu lesen. Weitere Informationen finden Sie unter Löschen eines Delta Lake-Tabellenfeatures und Herabstufen des Tabellenprotokolls.

Außerkraftsetzen der standardmäßigen Featureaktivierung (optional)

Sie können die standardmäßige Aktivierung von Delta-Tabellenfunktionen während der Aktivierung der Liquid Clustering-Funktion außer Kraft setzen. Dadurch wird verhindert, dass die Lese- und Schreib-Protokolle, die diesen Tabellenfeatures zugeordnet sind, aktualisiert werden. Sie müssen über eine vorhandene Tabelle verfügen, um die folgenden Schritte auszuführen:

  1. Nutzen Sie ALTER TABLE zum Festlegen der Tabelleneigenschaft, die mindestens ein Feature 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 Auswirkungen der Deaktivierung auf Liquid Clustering
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 die Parallelität auf Zeilenebene deaktiviert, wodurch Transaktionen und Clusteringvorgänge wahrscheinlicher in Konflikt geraten. Weitere Informationen finden Sie unter Schreibkonflikte mit Parallelität auf Zeilenebene.
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 Durch das Deaktivieren der Zeilennachverfolgung wird die Parallelität auf Zeilenebene deaktiviert, wodurch Transaktionen und Clusteringvorgänge konfliktanfälliger werden. Weitere Informationen finden Sie unter Schreibkonflikte mit Parallelität auf Zeilenebene.
Prüfpunkte V2 Lese- und Schreibvorgänge erfordern Databricks Runtime 13.3 LTS und höher. 'delta.checkpointPolicy' = 'classic' Keine Auswirkungen auf das Liquid Clustering-Verhalten.

Limitations

  • 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 Iceberg-Tabellen mit Apache Iceberg v2 nicht unterstützt, da Löschvektoren und Zeilenverfolgung auf Iceberg-Tabellen nicht unterstützt werden.