CONVERT TO DELTA
Aplica-se a: SQL do Databricks
Runtime do Databricks
Converte uma tabela Parquet existente em uma tabela Delta in-loco. Esse comando lista todos os arquivos do diretório, cria um log de transações do Delta Lake que rastreia esses arquivos e infere automaticamente o esquema de dados lendo os rodapés de todos os arquivos Parquet. O processo de conversão coleta estatísticas para melhorar o desempenho das consultas na tabela Delta convertida. Se você fornecer um nome de tabela, o metastore também será atualizado e refletirá a tabela como tabela Delta.
Esse comando dá suporte à conversão de tabelas de Iceberg cujo formato de arquivo subjacente é Parquet. Nesse caso, o conversor gera o log de transações do Delta Lake com base no manifesto do arquivo nativo, esquema e informações de particionamento da tabela do Iceberg.
Sintaxe
CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]
Parâmetros
-
Um identificador de tabela opcionalmente qualificado ou um caminho para um diretório de arquivo
parquet
ouiceberg
. O nome não deve incluir uma especificação temporal ou especificação de opções. Para tabelas do Iceberg, você só pode usar caminhos, pois a conversão de tabelas do Iceberg gerenciadas não tem suporte. NO STATISTICS
Ignora a coleta de estatísticas durante o processo de conversão e conclui a conversão mais rapidamente. Após a tabela ser convertida ao Delta Lake, você pode usar
OPTIMIZE ZORDER BY
para reorganizar o layout de dados e gerar estatísticas.-
Particiona a tabela criada pelas colunas especificadas. Quando
table_name
é um caminho, oPARTITIONED BY
é necessário nos dados particionados. Quando otable_name
é um identificador de tabela é qualificado, a cláusulaPARTITIONED BY
é opcional e a especificação da partição é carregada do metastore. Em qualquer das abordagens, o processo de conversão será anulado e lançará uma exceção se a estrutura do diretório não estiver de acordo com a especificaçãoPARTITIONED BY
fornecida ou carregada.Observação
No Databricks Runtime 11.1 e versões inferiores, o
PARTITIONED BY
é um argumento necessário para todos os dados particionados.
Exemplos
Observação
Você não precisa fornecer informações de particionamento para tabelas de Iceberg ou tabelas registradas no 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
Advertências
Qualquer arquivo não rastreado pelo Delta Lake é invisível e pode ser excluído quando você executa VACUUM
. Evite atualizar ou acrescentar arquivos de dados durante o processo de conversão. Após a tabela ser convertida, todas as gravações devem passar pelo Delta Lake.
É possível que várias tabelas externas compartilhem o mesmo diretório Parquet subjacente. Nesse caso, se você executar CONVERT
em uma das tabelas externas, não será possível acessar as outras tabelas externas, pois seu diretório subjacente foi convertido de Parquet para Delta Lake. Para consultar ou gravar nessas tabelas externas novamente, você deve executar CONVERT
nelas também.
CONVERT
preenche as informações do catálogo, como propriedades de esquema e de tabela, para o log de transações do Delta Lake. Se o diretório subjacente já tiver sido convertido ao Delta Lake e seus metadados forem diferentes daqueles do catálogo, será gerada uma convertMetastoreMetadataMismatchException
.
Ao usar o Databricks Runtime, se você quiser que CONVERT
substitua os metadados existentes no log de transações do Delta Lake, defina a configuração do SQL spark.databricks.delta.convert.metadataCheck.enabled
como false.