Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il clustering liquido è una tecnica di ottimizzazione del layout dei dati che sostituisce il partizionamento delle tabelle e ZORDER. Semplifica la gestione delle tabelle e ottimizza le prestazioni delle query organizzando automaticamente i dati in base alle chiavi di clustering.
A differenza del partizionamento tradizionale, è possibile ridefinire le chiavi di clustering senza riscrivere i dati esistenti. Ciò consente al layout dei dati di evolversi insieme alle mutevoli esigenze analitiche. Il clustering liquido si applica sia alle tabelle di streaming che alle viste materializzate.
Importante
Il clustering dinamico è generalmente disponibile per le tabelle Delta Lake con Databricks Runtime 15.4 LTS e versioni successive, ed è in anteprima pubblica per le tabelle Apache Iceberg con Databricks Runtime 16.4 LTS e versioni successive. Databricks consiglia di usare la versione più recente di Databricks Runtime per ottenere prestazioni ottimali.
Le tabelle Apache Iceberg v3 gestite supportano anche vettori di eliminazione, rilevamento delle righe, concorrenza a livello di riga e clustering liquido automatico. Queste funzionalità richiedono Databricks Runtime 18.0 e versioni successive. Vedere Usare le funzionalità di Apache Iceberg v3.
Quando usare il clustering liquido
Databricks consiglia il clustering liquido per tutte le nuove tabelle, incluse le tabelle di streaming e le viste materializzate. Gli scenari seguenti traggono vantaggio in particolare dal clustering:
- Query che filtrano in base a colonne con cardinalità elevata.
- Tabelle con forte asimmetria dei dati.
- Tabelle in rapida crescita che richiedono operazioni di manutenzione e ottimizzazione.
- Tabelle con requisiti di scrittura simultanea.
- Tabelle con modelli di accesso diversi o modificati.
- Tabelle in cui una chiave di partizione tipica potrebbe restituire risultati da troppe o troppo poche partizioni.
Abilitare il clustering liquido
È possibile abilitare il clustering liquido in una tabella non partizionata esistente o durante la creazione di tabelle. Il clustering non è compatibile con il partizionamento o ZORDER. Databricks consiglia di consentire alla piattaforma di gestire tutte le operazioni di layout e ottimizzazione per i dati nella tabella. Dopo aver abilitato il clustering liquido, eseguire i OPTIMIZE lavori per raggruppare i dati in modo incrementale. Vedere Come attivare il clustering.
Creare tabelle con clustering
Per abilitare il clustering liquido, aggiungere la CLUSTER BY frase a un'istruzione di creazione della tabella, come negli esempi seguenti. In Databricks Runtime 14.3 LTS e versioni successive è possibile usare le API DataFrame e l'API DeltaTable in Python o Scala per abilitare il clustering liquido per le tabelle Delta Lake.
SQL
Per creare una tabella vuota con clustering:
CREATE TABLE table1 (col0 INT, col1 STRING) CLUSTER BY (col0);
Per creare una tabella da dati esistenti con clustering, CLUSTER BY deve essere visualizzata dopo il nome della tabella, non nella SELECT clausola :
CREATE TABLE table2 CLUSTER BY (col0)
AS SELECT * FROM table1;
Per copiare la struttura di una tabella, inclusa la configurazione di clustering:
CREATE TABLE table3 LIKE table1;
Python
Per creare una tabella vuota con il clustering usando l'API DeltaTable :
(DeltaTable.create()
.tableName("table1")
.addColumn("col0", dataType = "INT")
.addColumn("col1", dataType = "STRING")
.clusterBy("col0")
.execute())
Per creare una tabella da un dataframe esistente:
df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")
Per creare una tabella usando l'API DataFrameWriterV2 (disponibile in Databricks Runtime 14.2 e versioni successive):
df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
Scala
Per creare una tabella vuota con il clustering usando l'API DeltaTable :
DeltaTable.create()
.tableName("table1")
.addColumn("col0", dataType = "INT")
.addColumn("col1", dataType = "STRING")
.clusterBy("col0")
.execute()
Per creare una tabella da un dataframe esistente:
val df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")
Per creare una tabella usando l'API DataFrameWriterV2 (disponibile in Databricks Runtime 14.2 e versioni successive):
val df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
Importante
Quando si usano le API DataFrame per impostare le chiavi di clustering, è possibile specificare solo le colonne di clustering durante la creazione della tabella o quando si usa la modalità overwrite, ad esempio con operazioni CREATE OR REPLACE TABLE. Non è possibile modificare le chiavi di clustering quando si usa la append modalità .
Per modificare le chiavi di clustering in una tabella esistente durante l'aggiunta dei dati, usare i comandi SQL ALTER TABLE per modificare la configurazione del clustering separatamente dalle operazioni di scrittura dei dati. Vedere Modificare le chiavi di clustering.
In Databricks Runtime 16.4 LTS e versioni successive, è possibile creare tabelle con il clustering liquido abilitato tramite operazioni di scrittura con Structured Streaming, come nei seguenti esempi:
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")
Avvertimento
Le tabelle Delta Lake con il liquid clustering abilitato utilizzano la versione 7 del writer Delta e la versione 3 del reader Delta. I client Delta che non supportano questi protocolli non possono leggere queste tabelle. Non è possibile effettuare il downgrade delle versioni del protocollo di tabella. Vedere Compatibilità e protocolli delle funzionalità delta Lake.
Per ignorare l'attivazione predefinita delle funzionalità, ad esempio i vettori di eliminazione, vedere Ignorare l'attivazione predefinita delle funzionalità (facoltativo).
Abilitare nelle tabelle esistenti
Per abilitare il clustering liquido in una tabella Delta Lake non partizionata esistente, eseguire le operazioni seguenti:
ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)
Per le tabelle Apache Iceberg gestite, tenere presente quanto segue:
- Per le tabelle con la specifica v2, è necessario disattivare in modo esplicito i vettori di eliminazione e il rilevamento delle righe quando si abilita il clustering liquido in una tabella esistente.
- Per le tabelle con la specifica v3, la disattivazione di queste funzionalità non è necessaria perché sono supportati i vettori di eliminazione e il rilevamento delle righe. Vedere Usare le funzionalità di Apache Iceberg v3.
Note
Il comportamento predefinito non applica il clustering ai dati scritti in precedenza. Per forzare il clustering, usare OPTIMIZE FULL o OPTIMIZE FULL WHERE <predicate>. Per ulteriori informazioni, vedere Forzare il reclustering.
Convertire una tabella partizionata in una tabella con clustering liquido
In Databricks Runtime 18.1 e versioni successive, per convertire una tabella Delta Lake partizionata esistente in liquid clustering, utilizzare REPLACE PARTITIONED BY WITH CLUSTER BY in un'istruzione ALTER TABLE. La conversione riduce al minimo i tempi di inattività del lettore e dello scrittore e supporta sia le tabelle esterne sia quelle gestite. Dopo la conversione, la tabella supporta le operazioni di lettura con Databricks Runtime 13.3 LTS e versioni successive.
Note
Per le tabelle Iceberg gestite, la conversione non è necessaria perché queste tabelle usano definizioni di partizione come chiavi di clustering liquido. L'esecuzione del comando di conversione genera un errore.
I vantaggi della conversione di tabelle partizionate in clustering liquido includono:
- Miglioramenti delle prestazioni per le tabelle che presentano una scarsa esclusione dei dati o un partizionamento eccessivo.
- Miglioramenti automatici delle prestazioni, usando
CLUSTER BY AUTO, per le tabelle con modelli di query che cambiano di frequente. - Le colonne di clustering sono flessibili e semplici da modificare, mentre il partizionamento è rigido e difficile da modificare.
- Riduzione dei conflitti di scrittura perché le tabelle con clustering liquido consentono la concorrenza a livello di riga. Consulta Concorrenza a livello di riga.
Syntax
ALTER TABLE <table_name>
REPLACE PARTITIONED BY WITH CLUSTER BY [( <clustering_columns> ) | AUTO]
La CLUSTER BY clausola supporta le opzioni seguenti:
-
( <clustering_columns> ): Specifica le nuove colonne di clustering. Databricks consiglia di mantenere le nuove colonne di clustering simili alle colonne di partizione originali. L'uso di colonne molto diverse attiva un'operazione di riclusterizzazione su larga scala alla prima esecuzione diOPTIMIZE. -
AUTO: usa le colonne di partizione correnti come colonne di clustering iniziali e consente di adattare l'ottimizzazione predittiva nel tempo. Disponibile solo per le tabelle gestite di Unity Catalog. Per ulteriori informazioni, vedere Clustering liquido automatico. - Nessuna opzione specificata: usa le colonne di partizione correnti come nuove colonne di clustering.
Per indicazioni sulla scelta delle chiavi di clustering durante la migrazione da tabelle partizionate, vedere Migrazione dal partizionamento o dall'ordine Z.
Esempi
Per eseguire il cluster in colonne diverse rispetto alle partizioni originali, ad esempio per una tabella partizionata in (year, month, day), eseguire le operazioni seguenti:
ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (day, id);
OPTIMIZE t1;
Note
Per trarre vantaggio dalla modifica delle colonne di clustering, è necessario eseguire OPTIMIZE.
Per usare il clustering liquido automatico e iniziare con le colonne di partizione correnti, eseguire le operazioni seguenti:
ALTER TABLE t2 REPLACE PARTITIONED BY WITH CLUSTER BY AUTO;
Per mantenere le colonne di partizione correnti come colonne di clustering, eseguire le operazioni seguenti:
ALTER TABLE t3 REPLACE PARTITIONED BY WITH CLUSTER BY;
Gestire letture e scritture simultanee durante la conversione
Dopo la conversione, Databricks Runtime 13.3 LTS e le versioni successive sono supportati per le operazioni di lettura e scrittura. Azure Databricks consiglia Databricks Runtime 15.4 LTS e versioni successive per i carichi di lavoro che leggono o scrivono nella tabella durante la conversione.
Vedere la tabella seguente per informazioni su come gestire carichi di lavoro di lettura e scrittura simultanei durante la conversione:
| Tipo di carico di lavoro | Operazioni di lettura durante la conversione | Operazioni di scrittura durante la conversione |
|---|---|---|
| Batch | Nessun tempo di inattività. Tutte le versioni di Databricks Runtime possono leggere la tabella durante la conversione. | Nessuna interruzione con Databricks Runtime 15.4 e versioni successive. Per Databricks Runtime 15.3 e versioni successive, Databricks consiglia di sospendere i carichi di lavoro prima della conversione e quindi riavviare i carichi di lavoro al termine della conversione. |
| Streaming |
Con il rilevamento dello schema e la mappatura delle colonne: Riavvia il flusso senza perdere alcun commit. Senza il rilevamento dello schema e la mappatura delle colonne: il flusso genera un'eccezione. Riavviare con un nuovo percorso del checkpoint e una nuova versione iniziale. I commit non vengono persi. |
Riavvia il flusso senza perdere alcun commit. |
Verificare o annullare una conversione
Per confermare la conversione, eseguire DESCRIBE EXTENDED per visualizzare le nuove colonne di clustering. Eseguire DESCRIBE HISTORY per visualizzare una serie di REORG operazioni, un'operazione UPGRADE PROTOCOL e un'operazione REPLACE PARTITIONED BY WITH CLUSTER BY .
Per eseguire il rollback di una conversione, usare RESTORE per tornare alla versione precedente. In alternativa, è possibile riscrivere la tabella usando REPLACE TABLE ... PARTITIONED BY (...) AS SELECT * FROM ....
Per eseguire il rollback usando RESTORE, eseguire i comandi seguenti:
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>;
Vedete RESTORE.
Converti una tabella partizionata in base a una colonna timestamp
Per convertire una tabella (t1) partizionata da una colonna timestamp (timestamp_col) e usare la colonna timestamp come chiave di clustering, è necessario impostare configurazioni aggiuntive:
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;
Se si tenta di convertire una colonna di partizione timestamp in una colonna di clustering senza queste configurazioni, il comando genera un errore:
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
Limitazioni di conversione
Le limitazioni seguenti si applicano al REPLACE PARTITIONED BY WITH CLUSTER BY comando di conversione:
- Le tabelle di streaming e le viste materializzate create nelle pipeline dichiarative di Lakeflow Spark non sono supportate. Per usare il clustering liquido, è necessario aggiornare la definizione della pipeline in modo che venga usata
CLUSTER BYinvece diPARTITIONED BY. - Le tabelle che usano Delta Sharing con il filtro delle partizioni non sono supportate. Per informazioni sul filtraggio delle partizioni per Delta Sharing, vedere Specificare le partizioni della tabella da condividere.
Rimuovere le chiavi di clustering
Per rimuovere le chiavi di clustering, usare la sintassi seguente:
ALTER TABLE table_name CLUSTER BY NONE;
Scegliere le chiavi di clustering
Scegliere le chiavi di clustering in base alle colonne usate più comunemente nei filtri di query. Le chiavi giuste migliorano significativamente il data skipping e le prestazioni delle query.
Suggerimento
Databricks consiglia di usare il clustering liquido automatico per selezionare in modo intelligente le chiavi di clustering in base ai modelli di query. Per ulteriori informazioni, vedere Clustering liquido automatico.
Linee guida per la selezione delle chiavi
Quando si specificano manualmente le chiavi di clustering, scegliere le colonne in base alle colonne usate più di frequente nei filtri di query. È possibile definire le chiavi di clustering in qualsiasi ordine. Se due colonne sono altamente correlate, è sufficiente includerne una come chiave di clustering.
È possibile specificare fino a quattro chiavi di clustering. Per le tabelle più piccole (meno di 10 TB), l'uso di più chiavi di clustering può ridurre le prestazioni quando si filtra una singola colonna. Ad esempio, il filtro con quattro chiavi comporta prestazioni peggiori rispetto al filtro con due chiavi. Tuttavia, man mano che le dimensioni della tabella aumentano, questa differenza di prestazioni diventa trascurabile per le query a colonna singola.
Le chiavi di clustering devono essere colonne con statistiche raccolte. Per impostazione predefinita, le tabelle Delta Lake raccolgono statistiche per le prime 32 colonne. Vedere Specificare le colonne delle statistiche.
Tipi di dati supportati
Il clustering supporta questi tipi di dati per le chiavi di clustering:
- Dati
- Timestamp:
- TimestampNTZ (Databricks Runtime 14.3 LTS e versioni successive)
- Stringa
- Intero, Lungo, Corto, Byte
- Virgola mobile, Doppio, Decimale
È possibile raggruppare in base a un StructField usando la notazione con punti, ad esempio CLUSTER BY (struct_col.field). I campi struct annidati sono supportati in qualsiasi profondità, ad esempio CLUSTER BY (struct_col.nested.field). Il tipo di dati del campo deve essere uno dei tipi supportati nell'elenco precedente.
Non è possibile eseguire il cluster in base a uno dei seguenti elementi:
- Tipi complessi, ad esempio
StructType,MapTypeoArrayType - elementi
MapTypeeArrayType, comemap_col['key'],array_col[0]omap_col.key.
Migrazione dal partizionamento o dall'ordine Z
Importante
Databricks consiglia di utilizzare la conversione automatica con il comando REPLACE PARTITIONED BY WITH CLUSTER BY. Vedi Convertire una tabella partizionata in un clustering liquido.
Se si sta convertendo una tabella esistente, prendere in considerazione le raccomandazioni seguenti:
| Tecnica di ottimizzazione dei dati corrente | Raccomandazione per le chiavi di clustering |
|---|---|
| Partizionamento in stile Hive | Usare le colonne di partizione come chiavi di clustering. |
| Indicizzazione dell'ordine Z | Usare le colonne ZORDER BY come chiavi di clustering. |
| Partizionamento in stile Hive e ordine Z | Usare sia le colonne di partizione che le colonne ZORDER BY come chiavi di clustering. |
| Colonne generate per ridurre la cardinalità (ad esempio, data per un timestamp) | Usare la colonna originale come chiave di clustering e non creare una colonna generata. |
Clustering automatico del liquido
In Databricks Runtime 15.4 LTS e versioni successive è possibile abilitare il clustering liquido automatico per le tabelle Delta Lake gestite da Unity Catalog. Per le tabelle Apache Iceberg v3 gestite da Unity Catalog, il clustering liquido automatico richiede Databricks Runtime 18.0 e versioni successive. Il clustering liquido automatico consente Azure Databricks di scegliere in modo intelligente le chiavi di clustering per ottimizzare le prestazioni delle query, usando la clausola CLUSTER BY AUTO.
Note
Il clustering liquido automatico è supportato anche per le viste materializzate e le tabelle in streaming, comprese le pipeline dichiarative di Lakeflow Spark e le pipeline autonome. Specificare CLUSTER BY AUTO nella pipeline o nella definizione SQL.
Funzionamento del clustering liquido automatico
Il clustering liquido automatico richiede l'ottimizzazione predittiva per la selezione automatica delle chiavi e le operazioni di clustering e viene eseguito in modo asincrono. Consulta Ottimizzazione predittiva per le tabelle gestite di Unity Catalog.
Il clustering liquido automatico applica ottimizzazioni intelligenti in base alle modalità di utilizzo:
- Analizza il carico di lavoro di query: Azure Databricks analizza il carico di lavoro di query cronologico della tabella e identifica le colonne candidate migliori per il clustering.
- Adatta alle modifiche: se i modelli di query o le distribuzioni dei dati cambiano nel tempo, il clustering liquido automatico seleziona nuove chiavi per ottimizzare le prestazioni.
- Selezione consapevole dei costi: Azure Databricks modifica le chiavi di clustering solo quando i risparmi stimati sui costi derivanti dai miglioramenti nello skipping dei dati superano i costi del clustering dei dati.
Il clustering liquido automatico potrebbe non selezionare le chiavi per i motivi seguenti:
- La tabella è troppo piccola per trarre vantaggio dal clustering liquido.
- La tabella ha già uno schema di clustering efficace, sia da precedenti chiavi manuali che dall'ordine di inserimento naturale che corrisponde ai modelli di query.
- La tabella non contiene query frequenti.
- Non stai usando Databricks Runtime 15.4 LTS o una versione successiva.
È possibile applicare il clustering liquido automatico per tutte le tabelle gestite di Unity Catalog, indipendentemente dai dati e dalle caratteristiche delle query. L'euristica decide se è vantaggioso selezionare le chiavi di clustering.
Compatibilità delle versioni di Databricks Runtime
È possibile leggere o scrivere tabelle con clustering automatico abilitato da tutte le versioni di Databricks Runtime che supportano il clustering liquido. Tuttavia, la selezione intelligente della chiave si basa sui metadati introdotti in Databricks Runtime 15.4 LTS.
Usare Databricks Runtime 15.4 LTS o versione successiva per assicurarsi che le chiavi selezionate automaticamente traggano vantaggio da tutti i carichi di lavoro e che questi carichi di lavoro vengano considerati quando si selezionano nuove chiavi.
Abilitare o disattivare il raggruppamento automatico dei liquidi
SQL
Per creare una tabella con clustering liquido automatico:
CREATE OR REPLACE TABLE table1 (column01 int, column02 string) CLUSTER BY AUTO;
Per abilitare il clustering liquido automatico su una tabella esistente, comprese le tabelle con chiavi specificate manualmente:
ALTER TABLE table1 CLUSTER BY AUTO;
Per impostare gli hint iniziali della colonna di clustering per la selezione della chiave, impostare le chiavi di clustering e quindi attivare il clustering automatico:
ALTER TABLE table1 CLUSTER BY (c1, c2);
ALTER TABLE table1 CLUSTER BY AUTO;
In alternativa, usare l'API Python per impostare hint in una singola operazione.
Per disattivare il clustering automatico dei liquidi:
ALTER TABLE table1 CLUSTER BY NONE;
Per disattivare il clustering liquido automatico e specificare le colonne di clustering:
ALTER TABLE table1 CLUSTER BY (column01, column02);
Se per una tabella esistente è abilitato il clustering liquido automatico, l'esecuzione di CREATE OR REPLACE table_name senza CLUSTER BY AUTO disattiva il clustering automatico e non mantiene le colonne di clustering. Per mantenere il clustering liquido automatico ed eventuali colonne selezionate in precedenza, includere CLUSTER BY AUTO nell'istruzione replace. Con CLUSTER BY AUTO, l'ottimizzazione predittiva utilizza il carico di lavoro storico delle query relativo alla tabella per identificare le migliori chiavi di clustering.
Python
L'API Python è disponibile in Databricks Runtime 16.4 e versioni successive. È possibile usare Python solo quando si crea o si sostituisce una tabella. Usare SQL per modificare lo clusterByAuto stato di una tabella esistente.
Per creare una tabella con clustering liquido automatico usando DataFrameWriter:
df = spark.read.table("table1")
df.write
.format("delta")
.option("clusterByAuto", "true")
.saveAsTable(...)
Per impostare le indicazioni iniziali sulla colonna di clustering per selezionare la chiave usando DataFrameWriter:
df.write
.format("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option("clusterByAuto", "true")
.saveAsTable(...)
Per creare una tabella con clustering liquido automatico usando DataFrameWriterV2:
df.writeTo(...).using("delta")
.option("clusterByAuto", "true")
.create()
Per impostare le indicazioni iniziali sulla colonna di clustering per selezionare la chiave usando DataFrameWriterV2:
df.writeTo(...).using("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option("clusterByAuto", "true")
.create()
Per creare una tabella di streaming con il clustering liquido automatico:
spark.readStream.table("source_table")
.writeStream
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Per impostare le indicazioni iniziali della colonna di clustering per la selezione delle chiavi in una tabella di streaming:
spark.readStream.table("source_table")
.writeStream
.clusterBy("column1", "column2")
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Quando si usano .clusterBy per gli hint di selezione della chiave del cluster insieme a .option('clusterByAuto', 'true'), il comportamento è il seguente:
- Se questo imposta il clustering liquido automatico per la prima volta, le colonne di clustering vengono impostate sulle colonne specificate in
.clusterBy. - Se si tratta di una tabella esistente con clustering liquido automatico abilitato, un hint
.clusterByviene accettato una sola volta. Ad esempio, le colonne specificate da.clusterByvengono impostate solo se la tabella non dispone di colonne di clustering impostate.
Importante
Quando si usano le API DataFrame, l'opzione clusterByAuto può essere impostata solo quando si usa la modalità overwrite. Non è possibile impostare clusterByAuto quando si utilizza la modalità append. Questa restrizione equivale all'impostazione manuale delle colonne di clustering. È possibile configurare le impostazioni di clustering solo durante le operazioni di creazione o sostituzione delle tabelle utilizzando la modalità overwrite.
Come soluzione alternativa, se si vuole modificare lo stato in una tabella esistente durante l'aggiunta clusterByAuto dei dati, usare i comandi SQL ALTER TABLE per modificare la configurazione del clustering separatamente dalle operazioni di scrittura dei dati.
Controllare se il clustering automatico è abilitato
Per verificare se per una tabella è abilitato il clustering liquido automatico, usare DESCRIBE TABLE o SHOW TBLPROPERTIES.
Se il clustering liquido automatico è abilitato, la clusterByAuto proprietà viene impostata su true. La clusteringColumns proprietà mostra le colonne di clustering correnti selezionate automaticamente o manualmente.
Limitations
Il clustering liquido automatico non è disponibile per le tabelle Apache Iceberg v2 gestite. È supportato per le tabelle Apache Iceberg v3 gestite in Databricks Runtime 18.0 e versioni successive.
Scrivere dati in una tabella cluster
Per scrivere in una tabella Delta Lake con clustering, è necessario usare un client di scrittura Delta che supporti tutte le funzionalità della tabella del protocollo di scrittura Delta usate da liquid clustering. Per scrivere in una tabella iceberg in cluster, è possibile usare l'API del catalogo REST Iceberg di Unity Catalog. In Azure Databricks è necessario usare Databricks Runtime 13.3 LTS e versioni successive.
Operazioni che supportano il clustering in scrittura
Le operazioni che si raggruppano durante la scrittura includono le seguenti:
-
INSERT INTOOperazioni -
CTASistruzioni eRTAS -
COPY INTOdal formato Parquet spark.write.mode("append")
Soglie di dimensioni per il clustering
Il clustering in fase di scrittura viene attivato solo quando i dati nella transazione soddisfano una soglia di dimensioni. Queste soglie variano in base al numero di colonne di clustering e sono inferiori per le tabelle gestite di Unity Catalog rispetto ad altre tabelle Delta Lake.
| Numero di colonne di clustering | Dimensioni di soglia per le tabelle gestite del catalogo Unity | Dimensioni di soglia per altre tabelle Delta Lake |
|---|---|---|
| 1 | 64 MB | 256 MB |
| 2 | 256 MB | 1 GB |
| 3 | 512MB | 2GB |
| 4 | 1 GB | 4GB |
Poiché non tutte le operazioni applicano clustering liquido, Databricks consiglia l'esecuzione OPTIMIZE frequente per garantire che tutti i dati siano raggruppati in modo efficiente.
Carichi di lavoro di streaming
I carichi di lavoro Structured Streaming supportano il clustering in scrittura quando si imposta la configurazione spark.databricks.delta.liquid.eagerClustering.streaming.enabled di Spark su true. Il clustering per questi carichi di lavoro viene attivato solo se almeno uno degli ultimi cinque aggiornamenti di streaming supera una soglia di dimensioni rispetto alla tabella precedente.
Come attivare il clustering
L'ottimizzazione predittiva esegue automaticamente comandi OPTIMIZE per le tabelle abilitate. Consulta Ottimizzazione predittiva per le tabelle gestite di Unity Catalog. Quando si usa l'ottimizzazione predittiva, Databricks consiglia di disabilitare tutti i processi pianificati OPTIMIZE .
Per attivare il clustering, è necessario usare Databricks Runtime 13.3 LTS o versione successiva. Databricks consiglia Databricks Runtime 17.3 LTS e versioni successive per ottenere prestazioni più veloci OPTIMIZE su tabelle di grandi dimensioni. Usare il OPTIMIZE comando nella tabella:
OPTIMIZE table_name;
Il clustering liquido è incrementale, vale a dire che OPTIMIZE riscrive solo i dati in base alle esigenze di clustering.
OPTIMIZE non riscrive i file di dati con chiavi di clustering che non corrispondono ai dati in clustering. Per ulteriori informazioni, vedere Forzare il reclustering.
Se non si utilizza l'ottimizzazione predittiva, Databricks consiglia di pianificare regolarmente job OPTIMIZE per raggruppare i dati. Per le tabelle che riscontrano molti aggiornamenti o inserimenti, Databricks consiglia di pianificare un'attività OPTIMIZE ogni una o due ore. Poiché il raggruppamento liquido è incrementale, la maggior parte dei processi OPTIMIZE per le tabelle in cluster viene eseguita rapidamente.
Forzare il riclusterizzazione
In Databricks Runtime 16.4 LTS e versioni successive è possibile forzare il clustering di tutti i record in una tabella con la sintassi seguente:
OPTIMIZE table_name FULL;
Importante
Eseguendo OPTIMIZE FULL, tutti i dati esistenti vengono riorganizzati secondo necessità. Per le tabelle di grandi dimensioni che in precedenza non sono state raggruppate nelle chiavi specificate, questa operazione potrebbe richiedere ore.
Eseguire il comando OPTIMIZE FULL quando si abilita il clustering per la prima volta o si modificano le chiavi di clustering. Se in precedenza è stata eseguita OPTIMIZE FULL e non sono state apportate modifiche alle chiavi di clustering, OPTIMIZE FULL viene eseguito come OPTIMIZE. In questo scenario usa OPTIMIZE un approccio incrementale e riscrive solo i file che non sono stati compattati in precedenza. Usare sempre OPTIMIZE FULL per garantire che il layout dei dati rifletta le chiavi di clustering correnti.
Ricluster parziale
In Databricks Runtime 18.1 e versioni successive è possibile forzare il clustering per un subset di record usando OPTIMIZE FULL WHERE <predicate>. Un file viene incluso se una parte del relativo intervallo si sovrappone al predicato. Vedere Parametri.
OPTIMIZE events FULL WHERE event_date >= '2025-01-01';
Leggere i dati da una tabella clusterizzata
È possibile leggere i dati in una tabella Delta Lake in cluster usando qualsiasi client Delta Lake che supporta la lettura dei vettori di eliminazione. Usando l'API del catalogo REST di Iceberg, è possibile leggere i dati in una tabella Iceberg cluster. Il clustering liquido migliora le prestazioni delle query tramite l'omissione automatica dei dati quando si filtrano le chiavi di clustering.
SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";
Gestire le chiavi di clustering
Vedere come viene raggruppata una tabella
È possibile usare i comandi DESCRIBE per visualizzare le chiavi di clustering per una tabella, come negli esempi seguenti:
DESCRIBE TABLE table_name;
DESCRIBE DETAIL table_name;
Modificare le chiavi di clustering
È possibile modificare le chiavi di clustering per una tabella in qualsiasi momento eseguendo un comando ALTER TABLE, come nell'esempio seguente:
ALTER TABLE table_name CLUSTER BY (new_column1, new_column2);
Quando si modificano le chiavi di clustering, le operazioni successive OPTIMIZE e di scrittura usano il nuovo approccio di clustering, ma i dati esistenti non vengono riscritti. Per riscrivere i dati esistenti con le chiavi di clustering aggiornate, vedere Forzare il reclustering.
È anche possibile disattivare il clustering impostando le chiavi su NONE, come nell'esempio seguente:
ALTER TABLE table_name CLUSTER BY NONE;
L'impostazione delle chiavi del cluster su NONE non riscrive i dati in cluster, ma impedisce alle operazioni future OPTIMIZE di usare chiavi di clustering.
Usare il clustering liquido da un motore esterno
È possibile abilitare il clustering liquido su tabelle Iceberg gestite da motori Iceberg esterni. Per abilitare il clustering liquido, specificare le colonne di partizione durante la creazione di una tabella. Il catalogo unity interpreta le partizioni come chiavi di clustering. Ad esempio, eseguire il comando seguente in OSS Spark:
CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY c1;
Per disattivare il clustering liquido:
ALTER TABLE main.schema.icebergTable DROP PARTITION FIELD c2;
Per modificare le chiavi di clustering usando l'evoluzione della partizione Iceberg:
ALTER TABLE main.schema.icebergTable ADD PARTITION FIELD c2;
Se si specifica una partizione usando una trasformazione bucket, Unity Catalog elimina l'espressione e usa la colonna come chiave di clustering:
CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY (bucket(c1, 10));
Compatibilità per le tabelle con clustering fluido
Il clustering liquido usa funzionalità di tabella Delta Lake che richiedono versioni specifiche di Databricks Runtime per la lettura e la scrittura. Le tabelle create con clustering liquido in Databricks Runtime 14.3 LTS e versioni successive usano checkpoint V2 per impostazione predefinita. È possibile leggere e scrivere tabelle con checkpoint V2 in Databricks Runtime 13.3 LTS e versioni successive. Vedere Checkpoint V2.
Per supportare i lettori che usano Databricks Runtime dalla versione 12.2 LTS fino a 13.2, disabilitare il checkpoint V2 ed eseguire il downgrade del protocollo della tabella. Vedere Downgrade alla versione classica.
Eseguire l'override dell'abilitazione delle funzionalità predefinite (facoltativo)
È possibile sovrascrivere l'abilitazione predefinita delle funzionalità della tabella Delta Lake durante l'abilitazione del liquid clustering. Ciò impedisce gli aggiornamenti dei protocolli lettore e writer associati a tali funzionalità di tabella. Per completare la procedura seguente, è necessario disporre di una tabella esistente:
Utilizzare
ALTER TABLEper impostare la proprietà table che disattiva una o più funzionalità. Ad esempio, per disattivare i vettori di eliminazione, eseguire le operazioni seguenti:ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);Abilitare il clustering liquido nella tabella eseguendo quanto segue:
ALTER TABLE <table_name> CLUSTER BY (<clustering_columns>)
La tabella seguente contiene informazioni sulle funzionalità Delta che è possibile sovrascrivere e su come l'abilitazione influisce sulla compatibilità con le versioni di Databricks Runtime:
| Funzionalità Delta | Compatibilità del runtime | Proprietà per sovrascrivere l'abilitazione | Effetti sul raggruppamento dei liquidi se disattivata |
|---|---|---|---|
| Vettori di cancellazione | Le operazioni di lettura e scrittura richiedono Databricks Runtime 12.2 LTS e versioni successive. | 'delta.enableDeletionVectors' = false |
La disattivazione dei vettori di eliminazione disattiva anche la concorrenza a livello di riga, rendendo più probabili conflitti tra transazioni e operazioni di clustering. Consulta Concorrenza a livello di riga.DELETEI comandi , MERGEe UPDATE potrebbero essere eseguiti più lentamente. |
| Monitoraggio riga | Le operazioni di scrittura richiedono Databricks Runtime 13.3 LTS o versioni successive. Può essere letto da qualsiasi versione di Databricks Runtime. | 'delta.enableRowTracking' = false |
La disattivazione del rilevamento delle righe disattiva anche la concorrenza a livello di riga, rendendo più probabili conflitti tra transazioni e operazioni di clustering. Consulta Concorrenza a livello di riga. |
| Checkpoint V2 | Le letture e le scritture sono richieste da Databricks Runtime 13.3 LTS e versioni successive. | 'delta.checkpointPolicy' = 'classic' |
Nessun effetto sul comportamento di aggregazione del liquido. Vedere Checkpoint V2. |
Limitations
- Databricks Runtime 15.1 e versioni precedenti: Il clustering in scrittura non supporta le query di origine che includono filtri, join o aggregazioni.
- Databricks Runtime 15.4 LTS e versioni precedenti: non è possibile creare una tabella con clustering liquido abilitato usando una scrittura di structured streaming. È possibile usare Structured Streaming per scrivere dati in una tabella esistente con clustering liquido abilitato.
-
Apache Iceberg v2: la concorrenza a livello di riga non è supportata nelle tabelle Apache Iceberg v2 gestite perché i vettori di eliminazione e il rilevamento delle righe non sono supportati.
- La concorrenza a livello di riga è supportata nelle tabelle Apache Iceberg v3 gestite perché la specifica v3 supporta vettori di eliminazione e rilevamento delle righe. Vedere Usare le funzionalità di Apache Iceberg v3.