CONVERT TO DELTA
Aplica-se a: Databricks SQL Databricks Runtime
Converte uma mesa Parquet existente em uma tabela Delta no local. Este comando lista todos os arquivos no diretório, cria um log de transações 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 da consulta na tabela Delta convertida. Se você fornecer um nome de tabela, o metastore também será atualizado para refletir que a tabela agora é uma tabela Delta.
Este comando suporta a conversão de tabelas Iceberg cujo formato de arquivo subjacente é Parquet. Nesse caso, o conversor gera o log de transações Delta Lake com base no manifesto de arquivo nativo, esquema e informações de particionamento da tabela 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
parquet
diretório ouiceberg
arquivo. O nome não deve incluir uma especificação temporal. Para tabelas Iceberg, você só pode usar caminhos, pois a conversão de tabelas iceberg gerenciadas não é suportada. SEM ESTATÍSTICAS
Ignore a coleta de estatísticas durante o processo de conversão e conclua a conversão mais rapidamente. Depois que a tabela for convertida em Delta Lake, você poderá usar
OPTIMIZE ZORDER BY
para reorganizar o layout de dados e gerar estatísticas.-
Particione a tabela criada pelas colunas especificadas. Quando
table_name
é um caminho, oPARTITIONED BY
é necessário para dados particionados. Quando o é um identificador de tabela qualificado,PARTITIONED BY
atable_name
cláusula é opcional e a especificação da partição é carregada do metastore. Em qualquer uma das abordagens, o processo de conversão aborta e lança uma exceção se a estrutura de diretórios não estiver em conformidade com a especificação fornecida ou carregadaPARTITIONED BY
.Nota
No Databricks Runtime 11.1 e inferior,
PARTITIONED BY
é um argumento necessário para todos os dados particionados.
Exemplos
Nota
Não é necessário fornecer informações de particionamento para tabelas 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
Limitações
Qualquer arquivo não rastreado pelo Delta Lake é invisível e pode ser excluído quando você executa VACUUM
o . Você deve evitar atualizar ou anexar arquivos de dados durante o processo de conversão. Depois que a tabela for convertida, certifique-se de que todas as gravações passem pelo Delta Lake.
É possível que várias tabelas externas compartilhem o mesmo diretório Parquet subjacente. Neste caso, se você executar CONVERT
em uma das tabelas externas, então você não será capaz de acessar as outras tabelas externas porque seu diretório subjacente foi convertido de Parquet para Delta Lake. Para consultar ou gravar nessas tabelas externas novamente, você também deve executar CONVERT
nelas.
CONVERT
preenche as informações do catálogo, como propriedades de esquema e tabela, no log de transações do Delta Lake. Se o diretório subjacente já tiver sido convertido em Delta Lake e seus metadados forem diferentes dos metadados do catálogo, um convertMetastoreMetadataMismatchException
será lançado.
Ao usar o Databricks Runtime, se você quiser CONVERT
substituir os metadados existentes no log de transações do Delta Lake, defina a configuração spark.databricks.delta.convert.metadataCheck.enabled
SQL como false.