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 ersetzt die Tabellenpartitionierung und ZORDER
, um Datenlayout-Entscheidungen zu vereinfachen und die Abfrageleistung zu optimieren. Es bietet die Flexibilität, Clusteringschlüssel neu zu definieren, ohne vorhandene Daten neu zu schreiben, sodass sich das Datenlayout im Laufe der Zeit zusammen mit analytischen Anforderungen weiterentwickeln kann. Flüssiges Clustering gilt sowohl für Streamingtabellen als auch für materialisierte Ansichten.
Wichtig
Liquid Clustering ist in der Regel für Delta Lake und in Public Preview für Apache Iceberg verfügbar.
Für alle Delta Lake-Tabellen mit aktiviertem Liquid Clustering wird die Verwendung von Databricks Runtime 15.2 und höher empfohlen. Public Preview-Unterstützung mit Einschränkungen ist in Databricks Runtime 13.3 LTS und höher verfügbar. Parallelität auf Zeilenebene wird in Databricks Runtime 13.3 LTS und höher unterstützt und ist allgemein in Databricks Runtime 14.2 und höher für alle Tabellen mit aktivierten Löschvektoren verfügbar. Siehe Isolationsstufen und Schreibkonflikte in Azure Databricks.
Für alle Apache Iceberg-Tabellen mit flüssiger Clusterung ist Databricks Runtime 16.4 LTS und höher erforderlich.
Wofür wird Liquid Clustering verwendet?
Databricks empfiehlt flüssiges Clustering für alle neuen Tabellen, die sowohl Streaming Tables (STs) als auch Materialized Views (MVs) umfassen. Im Folgenden sind Beispiele von Szenarien aufgeführt, die von Clustering profitieren:
- Tabellen werden häufig nach Spalten mit hoher Kardinalität gefiltert.
- Tabellen mit einer erheblichen Neigung in der Datenverteilung
- Tabellen, die schnell wachsen und Wartungs- und Optimierungsaufwand erfordern.
- Tabellen mit parallelen 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 Liquid Clustering für eine vorhandene Tabelle oder während der Tabellenerstellung aktivieren. Clustering ist nicht mit der Partitionierung oder ZORDER
kompatibel und erfordert, dass Sie Azure Databricks zur Verwaltung aller Layout- und Optimierungsvorgänge für Daten in Ihrer Tabelle verwenden. Führen Sie nach der Aktivierung von Liquid Clustering OPTIMIZE
-Aufträge wie gewohnt aus, um Daten inkrementell zu clustern. Weitere Informationen finden Sie unter Auslösen von Clustering.
Um Liquid Clustering zu aktivieren, fügen Sie den CLUSTER BY
-Ausdruck wie in den folgenden Beispielen zu einem SQL-Befehl zur Tabellenerstellung hinzu.
Hinweis
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
CREATE TABLE table1(col0 INT, col1 string) CLUSTER BY (col0);
-- Using a CTAS statement
CREATE EXTERNAL TABLE table2 CLUSTER BY (col0) -- specify clustering after table name, not in subquery
LOCATION 'table_location'
AS SELECT * FROM table1;
-- Using a LIKE statement to copy configurations
CREATE TABLE table3 LIKE table1;
Für Apache Iceberg müssen Sie Löschvektoren und Zeilen-IDs explizit deaktivieren, wenn Liquid Clustering auf einer verwalteten Iceberg-Tabelle aktiviert wird.
Python
# Create an empty Delta table
(DeltaTable.create()
.tableName("table1")
.addColumn("col0", dataType = "INT")
.addColumn("col1", dataType = "STRING")
.clusterBy("col0")
.execute())
# Using a CTAS statement
df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")
# CTAS using DataFrameWriterV2
df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
Scala
// Create an empty Delta table
DeltaTable.create()
.tableName("table1")
.addColumn("col0", dataType = "INT")
.addColumn("col1", dataType = "STRING")
.clusterBy("col0")
.execute()
// Using a CTAS statement
val df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")
// CTAS using DataFrameWriterV2
val df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
In Databricks Runtime 16.0 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)
TBLPROPERTIES (
'clusterByAuto' = 'true'
);
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-Tabellen, die mit aktiviertem Liquid Clustering erstellt werden, verfügen über zahlreiche Delta-Tabellenfunktionen, die während der Erstellung aktiviert werden und die Delta Writer Version 7 sowie Reader Version 3 verwenden. Sie können die Aktivierung einiger dieser Features außer Kraft setzen. Siehe Außerkraftsetzen der Standardmäßigen Featureaktivierung (optional).
Tabellenprotokollversionen können nicht herabgestuft werden, und Tabellen mit aktiviertem Clustering können von Delta Lake-Clients, die nicht alle aktivierten Protokolltabellenfunktionen des Delta-Readers unterstützen, nicht gelesen werden. Siehe Delta Lake Featurekompatibilität und Protokolle.
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.
Wichtig
Das Standardverhalten wendet kein Clustering auf zuvor geschriebene Daten an. Um die Neuclusterung für alle Datensätze zu erzwingen, müssen Sie OPTIMIZE FULL
verwenden. Weitere Informationen finden Sie unter Erzwingen eines erneuten Clusterings für alle Datensätze.
Verwenden Sie die folgende Syntax, um Clusteringschlüssel zu entfernen:
ALTER TABLE table_name CLUSTER BY NONE;
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. Mit aktivierter automatischer Flüssigclustering wählt Azure Databricks intelligent Clustering-Schlüssel aus, um die Abfrageleistung zu optimieren. Sie aktivieren die automatische Flüssigkeitsclusterung mithilfe der CLUSTER BY AUTO
Klausel.
Wenn diese Option aktiviert ist, werden automatische Schlüsselauswahl- und Clusteringvorgänge asynchron als Wartungsvorgang ausgeführt und erfordern, dass die predictive Optimierung für die Tabelle aktiviert ist. Siehe Prädiktive Optimierung für verwaltete Unity Catalog-Tabellen.
Um Clusteringschlüssel zu identifizieren, analysiert Azure Databricks die historische Abfrageauslastung der Tabelle und identifiziert die besten Kandidatenspalten. Clusteringschlüssel werden geändert, wenn die prognostizierten Kosteneinsparungen durch Datensprungverbesserungen die Datenclusteringkosten überwiegen.
Wenn die Art und Weise, wie Sie Ihre Daten im Laufe der Zeit abfragen, oder die Abfrageleistung Änderungen an Ihren Datenverteilungen anzeigt, wählt das automatische Liquid Clustering neue Schlüssel aus, um die Leistung zu optimieren.
Wenn kein Schlüssel durch automatisches Flüssigkeitsgruppieren ausgewählt wurde, kann dies daran liegen, dass:
- Der Tisch ist zu klein, um von der Nutzung von flüssigen Clusterstrukturen zu profitieren.
- Die Tabelle hat bereits ein gutes Cluster-Schema. Sie verfügt beispielsweise über gute Schlüssel, die einmal angewendet wurden, oder die Einfügereihenfolge funktioniert bereits gut für das angegebene Abfragemuster, z. B. Daten, die in chronologischer Reihenfolge eingefügt wurden und beim Zeitstempel abgefragt wurden.
- 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. Diese Features bieten eine intelligente Optimierung des Datenlayouts basierend auf Ihren Datennutzungsmustern, und die Heuristiken entscheiden, ob es kostennützlich ist, Clusteringschlüssel auszuwählen.
Hinweis
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);
Hinweis
Wenn Sie CREATE OR REPLACE table_name
ohne Angabe von CLUSTER BY AUTO
ausführen und die Tabelle bereits vorhanden ist und das automatische Liquid Clustering aktiviert ist, werden die AUTO
-Einstellung und die Gruppierungsspalten für die Tabelle (sofern angewendet) beibehalten, wenn die Tabelle ersetzt wird. Die Predictive Optimization verwaltet auch die historische Abfragearbeitslast für diese Tabelle, um die besten Clusteringschlüssel zu identifizieren.
Python
df = spark.read.table("table1")
df.write
.format("delta")
.option(“clusterByAuto”, “true”)
.saveAsTable(...)
# To set clustering columns and auto, which serves as a way to give a hint
# for the initial selection.
df.write
.format("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option(“clusterByAuto”, “true”)
.saveAsTable(...)
# Using DataFrameWriterV2
df.writeTo(...).using("delta")
.option(“clusterByAuto”, “true”)
.create()
# To set clustering columns and auto, which serves as a way to give a hint
# for the initial selection.
df.writeTo(...).using("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option(“clusterByAuto”, “true”)
.create()
# Similar syntax can also be used to set clusterByAuto for streaming tables.
spark.readStream.table("source_table")
.writeStream
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
# Or to specify a hint for the clustering columns by specifying both auto and columns together
spark.readStream.table("source_table")
.writeStream
.clusterBy("column1", "column2")
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Hinweis
Die Python-API ist in Databricks Runtime 16.4 und höher verfügbar.
Wenn .clusterBy
zusammen mit .option('clusterByAuto', 'true)
verwendet wird, dann:
- Wenn dadurch die automatische Flüssigkeitsclusterung zum ersten Mal eingestellt wird, berücksichtigt sie immer die manuelle Eingabe und legt immer die Clusterspalten in
.clusterBy
fest. - 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 keine Clusterspalten bereits festgelegt hat, entweder durch Sie oder durch die automatische Flüssigkeitsclusterung.
Sie können Python nur beim Erstellen oder Ersetzen einer Tabelle verwenden. Verwenden Sie SQL, um den clusterByAuto
Status einer vorhandenen Tabelle 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.
Begrenzungen
Automatische Flüssigkeitsclusterung ist für Apache Iceberg nicht verfügbar.
Außerkraftsetzen der standardmäßigen Featureaktivierung (optional)
Sie können das Standardverhalten außer Kraft setzen, das Delta-Tabellenfeatures während der Aktivierung von Liquid Clustering ermöglicht. 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:
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);
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 |
---|---|---|---|
Löschvektoren | Lese- und Schreibvorgänge erfordern Databricks Runtime 12.2 LTS und höher. | 'delta.enableDeletionVectors' = false |
Die Parallelität auf Zeilenebene ist deaktiviert, wodurch Transaktionen und Clusteringvorgänge wahrscheinlicher in Konflikt stehen. 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 |
Die Parallelität auf Zeilenebene ist deaktiviert, wodurch Transaktionen und Clusteringvorgänge wahrscheinlicher in Konflikt stehen. Weitere Informationen finden Sie unter Schreibkonflikte mit Parallelität auf Zeilenebene. |
V2-Prüfpunkte | Lese- und Schreibvorgänge erfordern Databricks Runtime 13.3 LTS und höher. | 'delta.checkpointPolicy' = 'classic' |
Keine Auswirkungen auf das Liquid Clustering-Verhalten. |
Auswählen von Clusteringschlüssel
Databricks empfiehlt die automatische Flüssigclusterung für unterstützte Tabellen. Siehe Automatische Flüssigkeitsclusterung.
Databricks empfiehlt die Auswahl von Clusteringschlüsseln basierend auf den Spalten, die am häufigsten in Abfragefiltern verwendet werden. Clusteringschlüssel können in beliebiger Reihenfolge definiert werden. 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 (z. B. vier) die Leistung beeinträchtigen, wenn Sie nach einer einzelnen Spalte filtern, verglichen mit weniger Clusteringschlüsseln (z. B. zwei). Da die Tabellengröße jedoch zunimmt, wird der Leistungsunterschied bei der Verwendung von mehr Clusteringschlüsseln für Einzelspaltenabfragen vernachlässigbar.
Sie können nur Spalten angeben, die als Clusterschlüssel gesammelte Statistiken enthalten. Standardmäßig werden für die ersten 32 Spalten in einer Delta-Tabelle Statistiken erfasst. Weitere Informationen finden Sie unter Angeben von Delta-Statistikspalten.
Clustering unterstützt die folgenden Datentypen für Clusteringschlüssel:
- Datum
- Zeitstempel
- TimestampNTZ (benötigt Databricks Runtime 14.3 LTS oder höher)
- Zeichenfolge
- Ganze Zahl
- Lang
- Kurz
- Schweben
- Doppelt
- Dezimalzahl
- Byte
Wenn Sie eine vorhandene Tabelle konvertieren, sollten Sie die folgenden Empfehlungen berücksichtigen:
Aktuelle Datenoptimierungstechnik | Empfehlung für Clusteringschlüssel |
---|---|
Partitionierung im Hive-Stil | Verwenden Sie Partitionsspalten als Clusteringschlüssel. |
Indizierung nach Z-Reihenfolge | 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. |
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 von Delta-Schreibprotokolltabellen 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.
Die folgenden Vorgänge gruppieren Daten beim Schreiben:
-
INSERT INTO
-Vorgänge -
CTAS
- undRTAS
-Anweisungen -
COPY INTO
aus dem Parquet-Format spark.write.mode("append")
Strukturierte Streaming-Schreibvorgänge lösen nie Clustering beim Schreiben aus. Es gelten zusätzliche Einschränkungen. Informationen finden Sie unter Einschränkungen.
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 | 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.
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. Verwenden Sie den OPTIMIZE
Befehl in Ihrer Tabelle:
OPTIMIZE table_name;
Liquid Clustering ist inkrementell, was bedeutet, dass Daten nur bei Bedarf neu geschrieben werden, um die zu gruppierenden Daten aufzunehmen. Datendateien mit Clusterschlüsseln, die nicht mit den gruppierten Daten übereinstimmen, werden nicht umgeschrieben.
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;
Wichtig
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 OPTIMIZE
identisch ausgeführt. In diesem Szenario wird ein inkrementeller Ansatz verwendet und nur Dateien neu geschrieben, OPTIMIZE
die noch nicht kompaktiert 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.
SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";
Ä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;
Wenn Sie Clusteringschlüssel auf NONE
festlegen, werden bereits gruppierte Daten nicht neu geschrieben, aber zukünftige OPTIMIZE
-Vorgänge werden daran gehindert, Clusteringschlüssel zu verwenden.
Verwenden von Flüssigkeitsclustering von einem externen Motor
Sie können Liquid Clustering auf verwalteten Iceberg-Tabellen von externen Iceberg-Engines 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, lässt Unity Catalog den Ausdruck wegfallen und verwendet die Spalte als Clusterschlüssel.
CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY (bucket(c1, 10));
Anzeigen, 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;
Kompatibilität für Tabellen mit Liquid Clustering
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.
Begrenzungen
Es gelten die folgenden Einschränkungen:
- In Databricks Runtime 15.1 und darunter unterstützt Clustering beim Schreiben keine Quellabfragen, die Filter, Joins oder Aggregationen enthalten.
- Strukturierte Streamingworkloads unterstützen Clustering beim Schreiben nicht.
- In Databricks Runtime 15.4 LTS und früher können Sie keine Tabelle mit Liquid Clustering erstellen, die mithilfe eines Schreibvorgangs für das strukturierte Streaming aktiviert ist. Sie können strukturiertes Streaming verwenden, um Daten in eine vorhandene Tabelle mit aktivierter Liquid Clustering-Funktion zu schreiben.
- Parallelität auf Zeilenebene wird für verwaltete Iceberg-Tabellen nicht unterstützt, da Löschvektoren und Zeilenverfolgung in Iceberg-Tabellen nicht vorhanden sind.