CONVERT TO DELTA

Aplica-se a: marca de seleção positiva SQL do Databricks marca de seleção positiva 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

  • table_name

    Um identificador de tabela opcionalmente qualificado ou um caminho para um diretório de arquivo parquet ou iceberg. O nome não deve incluir uma especificação temporal. 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.

  • PARTITIONED BY

    Particiona a tabela criada pelas colunas especificadas. Quando table_name é um caminho, o PARTITIONED BY é necessário nos dados particionados. Quando o table_name é um identificador de tabela é qualificado, a cláusula PARTITIONED 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ção PARTITIONED 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.