Leia o Delta tables com os clientes Iceberg
Este artigo fornece detalhes para habilitar leituras do Iceberg em tables armazenadas com o Delta Lake no Azure Databricks. Esse recurso requer o Databricks Runtime 14.3 LTS ou superior.
Nota
Essa funcionalidade foi anteriormente chamada de Delta Lake Universal Format (UniForm).
Você pode configurar uma conexão externa para que o Unity Catalog funcione como um Iceberg catalog. Veja Read Databricks tables de clientes Iceberg.
Como funcionam as leituras do Iceberg (UniForm)?
Tanto o Delta Lake quanto o Iceberg consistem em arquivos de dados Parquet e uma camada de metadados. Ao habilitar leituras do Iceberg, configura o seu tables para generate os metadados do Iceberg automaticamente e de forma assíncrona, sem reescrever dados, permitindo que os clientes do Iceberg leiam tables Delta gravados pelo Azure Databricks. Uma única cópia dos arquivos de dados serve vários formatos.
Importante
- Tables, quando as leituras do Iceberg estão habilitadas, usa Zstandard em vez de Snappy como o codec de compressão para arquivos de dados Parquet subjacentes.
- A geração de metadados do Iceberg é executada de forma assíncrona na computação usada para gravar dados no Delta tables, o que pode aumentar o uso de recursos do driver.
- Para obter a documentação do recurso herdado UniForm
IcebergCompatV1
table, consulte Legacy UniForm IcebergCompatV1.
Requisitos
Para permitir a leitura de Iceberg, os seguintes requisitos devem ser atendidos:
- O Delta table deve ser registado no Unity Catalog. Há suporte para tables gerenciados e externos.
- O table deve ter o mapeamento column habilitado. Consulte columnsdo Delta Lake column.
- O table Delta deve ter um
minReaderVersion
>= 2 eminWriterVersion
>= 7. Consulte Como o Azure Databricks gere a compatibilidade de funcionalidades do Delta Lake?. - As gravações no table devem usar o Databricks Runtime 14.3 LTS ou superior.
Nota
Não é possível ativar vetores de exclusão num table com leituras de Iceberg ativadas.
Use REORG
para desativar e limpar vetores de exclusão enquanto habilita leituras do Iceberg em um table existente com vetores de exclusão habilitados. Consulte Ativar ou atualizar o suporte de leitura do Iceberg usando o REORG.
Ativar leituras de Iceberg (UniForm)
Importante
Quando você habilita as leituras do Iceberg, o recurso de protocolo de gravação IcebergCompatV2
é adicionado ao table. Somente os clientes que suportam esta funcionalidade de table podem escrever para tables com leituras Iceberg habilitadas. No ambiente do Azure Databricks, você deve usar o Databricks Runtime 14.3 LTS ou superior para gravar no tablesativado.
Você pode desativar as leituras do Iceberg desdefinindo a propriedade delta.universalFormat.enabledFormats
table. As atualizações para as versões do protocolo de leitor e gravador Delta Lake não podem ser desfeitas.
Você deve set as seguintes propriedades table para habilitar a leitura do Iceberg:
'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'
Quando você habilita as leituras do Iceberg pela primeira vez, a geração assíncrona de metadados começa. Esta tarefa deve ser concluída antes que os clientes externos possam consultar o table usando o Iceberg. Consulte Verificar o status de geração de metadados do Iceberg.
Para obter uma list de limitações, consulte Limitações.
Habilitar leituras do Iceberg durante a criação do table
mapeamentoColumn tem de estar ativado para usar Iceberg leituras. Isso acontece automaticamente se ativar as leituras do Iceberg durante a criação do table, como no exemplo a seguir:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Ativar leituras do Iceberg em um table existente
No Databricks Runtime 15.4 LTS e superior, você pode habilitar ou atualizar leituras do Iceberg em um table existente usando a seguinte sintaxe:
ALTER TABLE table_name SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Ativar ou atualizar o suporte de leitura do Iceberg usando o REORG
Você pode usar REORG
para habilitar a leitura e reescrita de arquivos de dados subjacentes do Iceberg, como no exemplo a seguir:
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
Use REORG
se alguma das seguintes situações for verdadeira:
- O seu table tem vetores de eliminação ativados.
- Você ativou anteriormente a
IcebergCompatV1
versão do UniForm Iceberg. - Você precisa ler a partir de motores Iceberg que não suportam arquivos Parquet estilo Hive, como Athena ou Redshift.
Quando ocorre a geração de metadados do Iceberg?
O Azure Databricks dispara a geração de metadados de forma assíncrona após a conclusão de uma transação de gravação Delta Lake. Esse processo de geração de metadados usa o mesmo cálculo que concluiu a transação Delta.
Nota
Você também pode acionar manualmente a geração de metadados do Iceberg. Consulte Acionar manualmente a conversão de metadados do Iceberg.
Para evitar latências de gravação associadas à geração de metadados, o Delta tables com confirmações frequentes pode agrupar várias confirmações Delta em um único commit para metadados do Iceberg.
O Delta Lake garante que apenas um processo de geração de metadados esteja em andamento em um determinado recurso de computação. Confirmações que iniciariam um segundo processo simultâneo de geração de metadados são bem-sucedidamente integradas na Delta, mas não iniciam a geração assíncrona de metadados do Iceberg. Isso evita a latência em cascata para a geração de metadados para cargas de trabalho com confirmações frequentes (segundos a minutos entre confirmações).
Consulte Delta e Iceberg versões table
versões Delta e Iceberg table
O Delta Lake e o Iceberg permitem consultas de retrocesso no tempo usando versões table ou marcas temporais armazenadas em metadados table.
Em geral, as versões Delta table não se alinham com as versões do Iceberg pelo timestamp de commit ou pelo ID de versão. Para verificar a qual versão de um Delta table uma determinada versão de um Iceberg table corresponde, pode-se usar as propriedades table correspondentes. Consulte Verificar o status de geração de metadados do Iceberg.
Verificar o status de geração de metadados do Iceberg
Habilitar leituras do Iceberg em um table adiciona os seguintes campos aos metadados do Unity Catalog e do Iceberg table para rastrear o status de geração de metadados:
Campo de metadados | Description |
---|---|
converted_delta_version |
A última versão do Delta table para a qual os metadados do Iceberg foram gerados com sucesso. |
converted_delta_timestamp |
O carimbo de data/hora da última confirmação Delta para a qual os metadados do Iceberg foram gerados com sucesso. |
No Azure Databricks, você pode revisar esses campos de metadados seguindo um destes procedimentos:
- Revisão da seção retornada
Delta Uniform Iceberg
porDESCRIBE EXTENDED table_name
. - Revisão de metadados table no Explorer Catalog.
- Usando a API REST do para get um table.
Consulte a documentação do cliente Iceberg para saber como consultar propriedades table fora do Azure Databricks. Para o OSS Apache Spark, você pode ver essas propriedades usando a seguinte sintaxe:
SHOW TBLPROPERTIES <table-name>;
Acionar manualmente a conversão de metadados do Iceberg
Você pode acionar manualmente a geração de metadados do Iceberg para a versão mais recente do Delta table. Esta operação é executada de forma síncrona, o que significa que, quando concluída, o conteúdo table disponível no Iceberg reflete a versão mais recente do table Delta disponível quando o processo de conversão foi iniciado.
Esta operação não deve ser necessária em condições normais, mas pode ajudar se você encontrar o seguinte:
- Um cluster termina antes que a geração automática de metadados seja bem-sucedida.
- Um erro ou falha de trabalho interrompe a geração de metadados.
- Um cliente que não suporta a geração de metadados UniForm Iceberg escreve no Delta table.
Use a sintaxe a seguir para acionar manualmente a geração de metadados do Iceberg:
MSCK REPAIR TABLE <table-name> SYNC METADATA
Ver REPAIR TABLE.
Leia o Iceberg usando um caminho JSON de metadados
Alguns clientes Iceberg exigem que você forneça um caminho para arquivos de metadados versionados para registrar tablesexternos do Iceberg. Cada vez que o Azure Databricks converte uma nova versão do table Delta em Iceberg, ele cria um novo arquivo JSON de metadados.
Os clientes que usam caminhos JSON de metadados para configurar o Iceberg incluem o BigQuery. Consulte a documentação do cliente leitor Iceberg para obter detalhes de configuração.
O Delta Lake armazena metadados do Iceberg no diretório table usando o seguinte padrão:
<table-path>/metadata/<version-number>-<uuid>.metadata.json
No Azure Databricks, você pode revisar esse local de metadados seguindo um destes procedimentos:
- Revisão da seção retornada
Delta Uniform Iceberg
porDESCRIBE EXTENDED table_name
. - Revisão de metadados table no Explorer Catalog.
- Usando o seguinte comando com a API REST:
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>
A resposta inclui as seguintes informações:
{
...
"delta_uniform_iceberg": {
"metadata_location": "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
}
}
Importante
Os clientes de leitor Iceberg baseados em caminho podem exigir a atualização manual e a atualização de caminhos JSON de metadados para ler as versões atuais do table. Os utilizadores podem encontrar erros ao consultar o Iceberg tables usando versões desatualizadas, uma vez que os arquivos de dados Parquet são removidos do Delta table com VACUUM
.
Limitações
As seguintes limitações aplicam-se a todos os tables com leituras Iceberg ativadas:
- As leituras do Iceberg não funcionam em tables com vetores de exclusão habilitados. Consulte O que são vetores de exclusão?.
- Os Delta tables com leituras de Iceberg ativadas não suportam os tipos
VOID
. - O suporte ao cliente Iceberg é somente leitura. Não há suporte para gravações.
- Os clientes do leitor Iceberg podem ter limitações individuais, independentemente do suporte do Azure Databricks para leituras do Iceberg. Consulte a documentação do cliente escolhido.
- O recipients do Delta Sharing só pode ler o table como Delta, mesmo quando as leituras do Iceberg estão habilitadas.
- Alguns recursos do Delta Lake table utilizados na leitura do Iceberg não são suportados por alguns clientes leitores do Delta Sharing. Consulte O que é Delta Sharing?.
O Change Data Feed funciona para clientes Delta quando as leituras do Iceberg estão habilitadas, mas não é suportado no Iceberg.