Leia tabelas Delta Lake com clientes Iceberg usando UniForm
Disponível no Databricks Runtime 14.3 LTS e acima, as leituras do Iceberg permitem configurar as tabelas Delta Lake para gerar automaticamente metadados do Iceberg, habilitando clientes Iceberg a ler dados do Delta Lake sem regravar arquivos.
O senhor pode configurar uma conexão externa para que o Unity Catalog atue como um catálogo Iceberg. Consulte Acessar tabelas do Databricks a partir de clientes do Apache Iceberg.
Como as leituras do Iceberg funcionam
Tanto o Delta Lake quanto o Apache Iceberg são compostos por arquivos de dados Parquet e uma camada de metadados. Ativar leituras Iceberg configura suas tabelas Delta Lake para gerar automaticamente metadados Iceberg de forma assíncrona, sem reescrever dados, permitindo que os clientes Iceberg as leiam. Uma única cópia dos arquivos de dados suporta vários formatos.
Ao usar leituras Iceberg, considere o seguinte:
- As tabelas Delta Lake com leituras Iceberg habilitadas usam 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 assincronamente no compute usado para gravar dados em tabelas do Delta Lake, o que pode aumentar o uso de recursos do driver.
Para obter documentação sobre o recurso de tabela legado UniForm IcebergCompatV1, consulte Legacy UniForm IcebergCompatV1.
Requisitos
Para ativar as leituras do Iceberg, os seguintes requisitos devem ser atendidos:
-
A tabela Delta Lake deve ser registrada no Unity Catalog. Ambas as tabelas gerenciadas e externas são suportadas.
-
A tabela deve ter o mapeamento de colunas ativado. Consulte Renomear e soltar colunas com o mapeamento de colunas do Delta Lake.
- Depois que
IcebergCompatV2é habilitado para uma tabela, você não pode remover o recurso de tabelacolumnMapping.
- Depois que
-
A tabela Delta Lake deve ter um
minReaderVersion>= 2 eminWriterVersion>= 7. Consulte Compatibilidade e protocolos de recursos do Delta Lake. -
As gravações na tabela devem usar Databricks Runtime 14.3 LTS ou acima.
O senhor não pode ativar vetores de exclusão em uma tabela com leituras Iceberg ativadas.
Use REORG para desativar e limpar vetores de exclusão enquanto habilita leituras Iceberg em uma tabela existente com vetores de exclusão ativados. Consulte Habilitar ou atualizar o suporte à leitura do Iceberg usando REORG.
Habilitar leituras em Iceberg (UniForm)
Habilitar leituras de Iceberg adiciona o recurso de protocolo de gravação IcebergCompatV2 e atualiza o protocolo do gravador. Somente clientes que suportam este recurso de tabela podem gravar na tabela. Isso pode afetar a compatibilidade com clientes externos do Delta Lake. Consulte compatibilidade de recursos do Delta Lake e protocolos.
Quando o senhor habilita as leituras do Iceberg pela primeira vez, começa a geração assíncrona de metadados. Essa tarefa deve ser concluída antes que clientes externos possam consultar a tabela usando o Iceberg. Consulte Verificar o status de geração de metadados do Iceberg.
Para obter uma lista de limitações, consulte Limitações.
Durante a criação da tabela
O mapeamento de colunas é habilitado automaticamente quando você habilita as leituras Iceberg durante a criação da tabela:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.columnMapping.mode' = 'id',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
A Databricks recomenda que você defina delta.columnMapping.mode = id para fins de compatibilidade. Consulte Renomear e remover colunas com o mapeamento de colunas do Delta Lake.
Em uma tabela existente
Para habilitar leituras do Iceberg em uma tabela existente no Databricks Runtime 15.4 LTS e acima:
ALTER TABLE table_name SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Para obter detalhes sobre o modo de mapeamento de coluna name, consulte Modos de mapeamento de coluna.
Habilite ou atualize o suporte à leitura do Iceberg usando REORG
Use REORG para habilitar leituras do Iceberg se alguma das seguintes condições for verdadeira:
- Você ativou vetores de exclusão na sua tabela.
- O senhor ativou anteriormente a versão
IcebergCompatV1do UniForm Iceberg. - O senhor precisa ler de mecanismos do Iceberg que não suportam arquivos Parquet no estilo Hive, como o Athena ou o Redshift.
Para habilitar leituras do Iceberg e reescrever arquivos de dados subjacentes, use REORG como o exemplo a seguir:
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
Verifique se as leituras do Iceberg estão ativadas
Use DESCRIBE EXTENDED para verificar se a leitura do Iceberg (UniForm) está habilitada para sua tabela:
DESCRIBE EXTENDED catalog_name.schema_name.table_name;
Procure pela seção "Delta Uniform Iceberg" na saída. Se esta seção estiver presente, as leituras Iceberg estão habilitadas em sua tabela.
Alternativamente, você pode usar SHOW TBLPROPERTIES:
SHOW TBLPROPERTIES catalog_name.schema_name.table_name;
Verifique as seguintes propriedades:
delta.enableIcebergCompatV2 = truedelta.universalFormat.enabledFormats = iceberg
Se ambas as propriedades estiverem presentes com esses valores, as leituras do Iceberg serão habilitadas.
Desativar leituras Iceberg
Você pode desativar as leituras Iceberg desdefinindo a propriedade de tabela delta.universalFormat.enabledFormats:
ALTER TABLE table_name UNSET TBLPROPERTIES ('delta.universalFormat.enabledFormats');
As atualizações para as versões do protocolo de leitura e gravação do Delta Lake não podem ser desfeitas. Consulte a compatibilidade de recursos e protocolos do Delta Lake.
Geração de metadados Iceberg
Databricks aciona a geração de metadados assincronamente depois que uma transação de gravação do Delta Lake é concluída. Este processo de geração de metadados usa o mesmo compute que concluiu a transação do Delta Lake.
O senhor 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 escrita associadas à geração de metadados, tabelas Delta Lake com commits frequentes podem agrupar vários commits do Delta Lake em um único commit para os metadados do Iceberg.
O Delta Lake garante que apenas um processo de geração de metadados esteja em andamento em um determinado recurso de compute. Commits que acionariam um segundo processo de geração de metadados concorrente são confirmados com sucesso no Delta Lake, mas não acionam a geração assíncrona de metadados Iceberg. Isso evita latência em cascata para a geração de metadados em cargas de trabalho com commits frequentes (de segundos a minutos entre os commits).
Veja as versões de tabela Delta e Iceberg.
Versões de mesa Delta e Iceberg
Delta Lake e Iceberg permitem consultas de viagem do tempo usando versões de tabela ou registros de data e hora armazenados nos metadados da tabela.
As versões da tabela Delta Lake não têm garantia de alinhamento com as versões do Iceberg nem pelo carimbo de data/hora do commit nem pelo ID da versão. Para verificar a qual versão de uma tabela Delta Lake uma determinada versão de tabela Iceberg corresponde, use as propriedades de tabela correspondentes. Consulte Verificar o status da geração de metadados do Iceberg.
Verificar o status da geração de metadados do Iceberg
A ativação de leituras do Iceberg em uma tabela adiciona os seguintes campos aos metadados do Unity Catalog e da tabela do Iceberg para rastrear o status da geração de metadados:
Campo de metadados | Descrição |
|---|---|
| A versão mais recente da tabela Delta Lake para a qual os metadados Iceberg foram gerados com sucesso. |
| O timestamp do último commit do Delta Lake para o qual os metadados do Iceberg foram gerados com sucesso. |
No Databricks, o senhor pode revisar esses campos de metadados seguindo um dos seguintes procedimentos:
- Revisando a seção
Delta Uniform Icebergretornada porDESCRIBE EXTENDED table_name. - Revisão dos metadados da tabela com o Catalog Explorer.
Consulte a documentação do seu cliente Iceberg Reader para saber como revisar as propriedades da tabela fora do Databricks. Para o OSS Apache Spark, o senhor pode ver essas propriedades usando a seguinte sintaxe:
SHOW TBLPROPERTIES <table-name>;
Acionar manualmente a conversão de metadados do Iceberg
É possível acionar manualmente a geração de metadados do Iceberg para a versão mais recente da tabela do Delta Lake. Esta operação é executada de forma síncrona. Quando concluída, o conteúdo da tabela disponível no Iceberg reflete a versão mais recente da tabela Delta Lake disponível quando o processo de conversão começou.
Essa operação não é necessária em condições normais. Use-o para se recuperar do seguinte:
- Um clustering é encerrado antes que a geração automática de metadados seja bem-sucedida.
- Um erro ou falha no trabalho interrompe a geração de metadados.
- Um cliente que não oferece suporte à geração de metadados UniForm Iceberg grava na tabela Delta Lake.
Use a seguinte sintaxe para acionar manualmente a geração de metadados do Iceberg:
MSCK REPAIR TABLE <table-name> SYNC METADATA
Veja a TABELA DE REPARO.
Ler o Iceberg usando um caminho JSON de metadados
Alguns clientes Iceberg, como o BigQuery, exigem que você forneça um caminho para arquivos de metadados versionados para efetuar o registro de tabelas Iceberg externas. Cada vez que o Databricks converte uma nova versão da tabela Delta Lake para Iceberg, ele cria um novo arquivo JSON de metadados.
Para detalhes de configuração, consulte a documentação do seu cliente leitor Iceberg específico.
O Delta Lake armazena metadados do Iceberg no diretório da tabela usando o seguinte padrão:
<table-path>/metadata/<version-number>-<uuid>.metadata.json
No Databricks, o senhor pode revisar esse local de metadados executando uma das seguintes ações:
- Revisando a seção
Delta Uniform Icebergretornada porDESCRIBE EXTENDED table_name. - Revisão dos metadados da tabela com o Catalog Explorer.
Clientes de leitores Iceberg baseados em caminho podem exigir a atualização manual e a atualização dos caminhos JSON de metadados para ler as versões atuais da tabela. Os usuários podem encontrar erros ao consultar tabelas Iceberg usando versões desatualizadas, já que os arquivos de dados Parquet são removidos da tabela Delta Lake com VACUUM.
Limitações
As seguintes limitações existem para todas as tabelas com leituras Iceberg ativadas:
-
O suporte ao cliente Iceberg é somente leitura. As gravações não são suportadas.
- Os clientes de leitura do Iceberg podem ter limitações individuais, independentemente do suporte do Databricks para leituras do Iceberg. Consulte a documentação do cliente escolhido.
-
Vetores de deleção não são compatíveis com leituras Iceberg v2. No entanto, o Apache Iceberg v3 é compatível com vetores de deleção. Consulte Usar recursos do Apache Iceberg v3 e Vetores de deleção no Databricks.
-
As leituras do Iceberg não podem ser habilitadas em view materializadas ou tabelas de transmissão.
-
A tabela Delta Lake deve ser acessada por nome (não por caminho) para acionar automaticamente a geração de metadados Iceberg.
-
As tabelas Delta Lake com leituras do Iceberg habilitadas não suportam tipos
VOID. -
Alguns recursos da tabela Delta Lake usados por leituras Iceberg não são compatíveis com alguns clientes de leitura OpenSharing. Veja O que é OpenSharing?.
-
Os destinatários do OpenSharing podem ler tabelas Delta Lake com leituras Iceberg ativadas como tabelas Iceberg usando a API de Catálogo REST do Iceberg. Esse recurso está em Prévia Pública. Consulte Ativar o compartilhamento para clientes Iceberg externos.
-
O feed de dados de alteração legado funciona para clientes Delta quando as leituras Iceberg estão habilitadas, mas não tem suporte no Iceberg. Consulte feed de dados de alteração legado para Delta Lake.