CONVERTER EM DELTA
Aplica-se a: do SQL do Databricks 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
-
Um identificador de tabela opcionalmente qualificado ou um caminho para um
parquet
diretório ouiceberg
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.-
Particione a tabela criada pelas colunas especificadas. Quando
table_name
é um caminho, oPARTITIONED BY
é necessário para dados particionados. Quando otable_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 carregadaPARTITIONED 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 VACUUM
o . 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:
- Execute o seguinte comando para a libertação da memória:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
- Elimine o
<path-to-table>/_delta_log
diretório.