Condividi tramite


CONVERT TO DELTA

Si applica a: segno di spunta sì Databricks SQL segno di spunta sì 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 deduce automaticamente lo schema dei dati leggendo i piè di pagina di tutti i file Parquet. Il processo di conversione raccoglie 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

  • table_name

    Un identificatore di tabella qualificato facoltativamente o un percorso di una parquet directory di file o iceberg . Il nome non deve includere una specifica temporale. Per le tabelle Iceberg, è possibile usare solo i percorsi, perché la conversione delle tabelle di iceberg gestite 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.

  • PARTIZIONATO DA

    Partizionare la tabella creata in base alle colonne specificate. Quando table_name è un percorso, è necessario per i PARTITIONED BY dati partizionati. table_name Quando è un identificatore di tabella completo, PARTITIONED BY la 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 di directory non è conforme alla specifica specificata o caricata PARTITIONED 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 sul 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

Precisazioni

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 vengano passate tramite Delta Lake.

È possibile che più tabelle esterne convidano 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 .

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 generata un'eccezione convertMetastoreMetadataMismatchException .

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.