Partilhar via


CONVERT TO DELTA

Aplica-se a: Marque Sim Databricks SQL Marque Sim 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

  • table_name

    Um identificador de tabela opcionalmente qualificado ou um caminho para um parquet diretório ou iceberg 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.

  • PARTICIONADO POR

    Particione a tabela criada pelas colunas especificadas. Quando table_name é um caminho, o PARTITIONED BY é necessário para dados particionados. Quando o é um identificador de tabela qualificado, PARTITIONED BY a table_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 carregada PARTITIONED 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 VACUUMo . 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.

Desfazer a conversão

Se você executou operações Delta Lake, como DELETE ou OPTIMIZE que podem alterar os arquivos de dados:

  1. Execute o seguinte comando para a coleta de lixo:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
  1. Exclua o <path-to-table>/_delta_log diretório.