CONVERTI IN DELTA
Si applica a: controllo SQL databricks Databricks Runtime
Converte una tabella Parquet esistente in una tabella Delta sul posto. Questo comando elenca tutti i file nella directory, crea un log delle transazioni Delta Lake che tiene traccia di questi file e inferisce automaticamente lo schema dei dati leggendo i piè di pagina di tutti i file Parquet. Il processo di conversione raccoglie le statistiche per migliorare le prestazioni delle query nella tabella Delta convertita. Se si specifica un nome di tabella, il metastore viene aggiornato anche per riflettere che la tabella è ora una tabella Delta.
Questo comando supporta la conversione di tabelle Iceberg il cui formato di file sottostante è Parquet. In questo caso, il convertitore genera il log delle transazioni Delta Lake in base al manifesto del file nativo della tabella Iceberg, allo schema e alle informazioni di partizionamento.
Sintassi
CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]
Parametri
-
Identificatore di tabella facoltativamente qualificato o percorso di una
parquet
directory oiceberg
file. Il nome non deve includere una specifica temporale. Per le tabelle iceberg è possibile usare solo i percorsi, poiché la conversione delle tabelle dell'iceberg gestito non è supportata. NESSUNA STATISTICA
Ignorare la raccolta di statistiche durante il processo di conversione e completare la conversione più velocemente. Dopo la conversione della tabella in Delta Lake, è possibile usare
OPTIMIZE ZORDER BY
per riorganizzare il layout dei dati e generare statistiche.-
Partizionare la tabella creata dalle colonne specificate. Quando
table_name
è un percorso, èPARTITIONED BY
necessario per i dati partizionati. Quando si tratta di un identificatore di tabella qualificato,PARTITIONED BY
latable_name
clausola è facoltativa e la specifica della partizione viene caricata dal metastore. In entrambi gli approcci, il processo di conversione interrompe e genera un'eccezione se la struttura della directory non è conforme alla specifica specificata o caricataPARTITIONED BY
.Nota
In Databricks Runtime 11.1 e versioni successive
PARTITIONED BY
è un argomento obbligatorio per tutti i dati partizionati.
Esempi
Nota
Non è necessario fornire informazioni di partizionamento per tabelle o tabelle iceberg registrate nel metastore.
CONVERT TO DELTA database_name.table_name; -- only for Parquet tables
CONVERT TO DELTA parquet.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`
PARTITIONED BY (date DATE); -- if the table is partitioned
CONVERT TO DELTA iceberg.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`; -- uses Iceberg manifest for metadata
Avvertenze
Qualsiasi file non rilevato da Delta Lake è invisibile e può essere eliminato quando si esegue VACUUM
. È consigliabile evitare di aggiornare o aggiungere file di dati durante il processo di conversione. Dopo la conversione della tabella, assicurarsi che tutte le scritture vadano attraverso Delta Lake.
È possibile che più tabelle esterne condividono la stessa directory Parquet sottostante. In questo caso, se si esegue CONVERT
in una delle tabelle esterne, non sarà possibile accedere alle altre tabelle esterne perché la directory sottostante è stata convertita da Parquet a Delta Lake. Per eseguire di nuovo query o scrivere in queste tabelle esterne, è necessario eseguirle CONVERT
anche.
CONVERT
popola le informazioni del catalogo, ad esempio le proprietà dello schema e della tabella, nel log delle transazioni Delta Lake. Se la directory sottostante è già stata convertita in Delta Lake e i relativi metadati sono diversi dai metadati del catalogo, viene generato un convertMetastoreMetadataMismatchException
oggetto.
Durante l'uso di Databricks Runtime, se si desidera CONVERT
sovrascrivere i metadati esistenti nel log delle transazioni Delta Lake, impostare la configurazione spark.databricks.delta.convert.metadataCheck.enabled
SQL su false.
Annullare la conversione
Se sono state eseguite operazioni Delta Lake, ad DELETE
esempio o OPTIMIZE
che possono modificare i file di dati:
- Eseguire il comando seguente per Garbage Collection:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
- Eliminare la
<path-to-table>/_delta_log
directory.