CONVERTER EM DELTA

Aplica-se a:verificar a verificação sim do SQL do Databricks marcada como sim Databricks Runtime

Converte uma tabela Parquet existente numa tabela Delta no local. Este comando lista todos os ficheiros no diretório, cria um registo de transações do Delta Lake que controla estes ficheiros e infere automaticamente o esquema de dados ao ler os rodapés de todos os ficheiros Parquet. O processo de conversão recolhe estatísticas para melhorar o desempenho das consultas na tabela Delta convertida. Se fornecer um nome de tabela, o metastore também é atualizado para refletir que a tabela é agora uma tabela Delta.

Este comando suporta a conversão de tabelas Iceberg cujo formato de ficheiro subjacente é Parquet. Neste caso, o conversor gera o registo de transações do Delta Lake com base no manifesto de ficheiro nativo, esquema e informações de criação de partições 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 ficheiro. O nome não pode incluir uma especificação temporal. Para tabelas iceberg, só pode utilizar caminhos, uma vez que a conversão de tabelas de iceberg geridas não é suportada.

  • SEM ESTATÍSTICAS

    Ignore a recolha de estatísticas durante o processo de conversão e conclua a conversão mais rapidamente. Depois de a tabela ser convertida no Delta Lake, pode utilizar OPTIMIZE ZORDER BY para reorganizar o esquema 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 table_name é um identificador de tabela qualificado, PARTITIONED BY a cláusula é opcional e a especificação da partição é carregada a partir do metastore. Em qualquer uma das abordagens, o processo de conversão aborta e gera uma exceção se a estrutura do diretório não estiver em conformidade com a especificação fornecida ou carregada PARTITIONED BY .

    Nota

    No Databricks Runtime 11.1 e abaixo, PARTITIONED BY é um argumento necessário para todos os dados particionados.

Exemplos

Nota

Não precisa de fornecer informações de criação de partições para tabelas ou tabelas iceberg registadas 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

Avisos

Qualquer ficheiro não monitorizado pelo Delta Lake é invisível e pode ser eliminado quando executa VACUUMo . Deve evitar atualizar ou acrescentar ficheiros de dados durante o processo de conversão. Após a conversão da tabela, certifique-se de que todas as escritas passam pelo Delta Lake.

É possível que várias tabelas externas partilhem o mesmo diretório Parquet subjacente. Neste caso, se executar CONVERT numa das tabelas externas, não poderá aceder às outras tabelas externas porque o respetivo diretório subjacente foi convertido do Parquet para o Delta Lake. Para consultar ou escrever novamente nestas tabelas externas, também tem de as executar CONVERT .

CONVERT preenche as informações do catálogo, como as propriedades do esquema e da tabela, para o registo 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 do catálogo, é lançado um convertMetastoreMetadataMismatchException .

Ao utilizar o Databricks Runtime, se quiser CONVERT substituir os metadados existentes no registo de transações do Delta Lake, defina a configuração spark.databricks.delta.convert.metadataCheck.enabled do SQL como falsa.

Anular a conversão

Se tiver efetuado operações do Delta Lake, como DELETE ou OPTIMIZE que podem alterar os ficheiros de dados:

  1. Execute o seguinte comando para a libertação da memória:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
  1. Elimine o <path-to-table>/_delta_log diretório.