CONVERT TO DELTA
Aplica-se a: Databricks SQL
Databricks Runtime
Converte um Parquet table existente diretamente em um Delta table. Este comando lista todos os arquivos no diretório, cria um log de transações Delta Lake que rastreia esses arquivos e infere automaticamente os dados schema lendo os rodapés de todos os arquivos Parquet. O processo de conversão recolhe estatísticas para melhorar o desempenho das consultas no Delta convertido table. Se você fornecer um nome table, o metastore também será atualizado para refletir que o table agora é um Delta table.
Este comando suporta a conversão do Iceberg tables, cujo formato subjacente de ficheiro é Parquet. Nesse caso, o conversor gera o log de transações do Delta Lake com base no manifesto de arquivo nativo do Iceberg table, bem como nas informações de schema e de particionamento.
Sintaxe
CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]
Parameters
-
Um table identifier opcionalmente qualificado ou um caminho para um diretório de arquivos
parquet
ouiceberg
. O nome não deve incluir uma especificação temporal ou uma especificação de opções. Para o Iceberg tables, só se podem usar caminhos, pois a conversão do iceberg gerido tables 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 o table for convertido em Delta Lake, pode usar o
OPTIMIZE ZORDER BY
para reorganizar o layout de dados e as estatísticas do generate.-
Partition o table criado pelo columnsespecificado. Quando
table_name
é um caminho, oPARTITIONED BY
é necessário para dados particionados. Quando otable_name
é um tableidentifierqualificado, a cláusulaPARTITIONED BY
é opcional e as especificações partition são carregadas 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 o Iceberg tables ou tables registrado 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 o table for convertido, certifique-se de que todas as escritas sejam realizadas através do Delta Lake.
É possível que vários tables externos partilhem o mesmo diretório Parquet subjacente. Neste caso, se você executar CONVERT
em um dos tablesexternos, então você não será capaz de acessar o outro tables externo porque seu diretório subjacente foi convertido de Parquet para Delta Lake. Para consultar ou gravar nesses tables externos novamente, você também deve executar CONVERT
neles.
CONVERT
preenche as informações de catalog, como propriedades schema e table, no log de transações do Delta Lake. Se o diretório subjacente já tiver sido convertido em Delta Lake e os respetivos metadados forem diferentes dos metadados catalog, um convertMetastoreMetadataMismatchException
será gerado.
Ao usar o Databricks Runtime, se você quiser que CONVERT
substitua os metadados existentes no log de transações do Delta Lake, set a configuração do SQL spark.databricks.delta.convert.metadataCheck.enabled
false.