Leia tabelas Delta Lake com clientes da Iceberg

Disponível em Databricks Runtime 14.3 LTS e superiores, as leituras Iceberg configuram tabelas Delta Lake para gerar automaticamente metadados Iceberg, permitindo que os clientes Iceberg leiam dados Delta Lake sem necessidade de reescrever ficheiros.

Você pode configurar uma conexão externa para que o Unity Catalog atue como um catálogo Iceberg. Consulte Aceda às tabelas do Azure Databricks a partir de clientes Apache Iceberg.

Como o Iceberg lê o funcionamento

Tanto o Delta Lake quanto o Apache Iceberg consistem em arquivos de dados Parquet e uma camada de metadados. Quando ativas as leituras Iceberg, o Azure Databricks configura as tuas tabelas para usarem o Universal Format (UniForm) para a camada de metadados. O UniForm gera automaticamente metadados do Iceberg de forma assíncrona juntamente com os metadados do Delta Lake, sem reescrever os ficheiros de dados do Parquet. Uma única cópia dos ficheiros de dados suporta tanto clientes Delta como Iceberg.

Ao usar leituras Iceberg, considere o seguinte:

  • As tabelas Delta Lake com a leitura Iceberg ativada utilizam Zstandard em vez de Snappy como codec de compressão para os ficheiros de dados Parquet subjacentes.
  • A geração de metadados do Iceberg é executada de forma assíncrona nos recursos de computação utilizados para escrever dados em tabelas Delta Lake, o que pode aumentar a utilização de recursos do driver.

Para obter documentação sobre a funcionalidade de tabela legada do UniForm IcebergCompatV1, consulte Legacy UniForm IcebergCompatV1.

Requisitos

Para permitir a leitura de Iceberg, os seguintes requisitos devem ser atendidos:

Observação

Não é possível ativar vetores de exclusão em uma tabela com leituras do Iceberg habilitadas.

Utilize REORG para desativar e remover os vetores de eliminação, ao mesmo tempo que ativa a leitura do Iceberg numa tabela existente com vetores de eliminação ativados. Consulte Como ativar ou atualizar o suporte de leitura do Iceberg usando REORG.

Ativar leitura do Iceberg

Observação

Ativar a leitura de Iceberg adiciona a funcionalidade IcebergCompatV2 ao protocolo de escrita e atualiza o protocolo de escrita. Apenas os clientes que suportam esta funcionalidade de tabela podem escrever na tabela. Isto pode afetar a compatibilidade com clientes externos da Delta Lake. Consulte Compatibilidade de recursos e protocolos do Delta Lake.

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 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 é ativado automaticamente quando ativas as leituras do Iceberg durante a criação da tabela:

CREATE TABLE T(c1 INT) TBLPROPERTIES(
  'delta.columnMapping.mode' = 'id',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

O Databricks recomenda que definas delta.columnMapping.mode = id para fins de compatibilidade. ** Consulte Renomear e remover colunas utilizando o mapeamento de colunas no Delta Lake.

Numa tabela existente

Para ativar leituras Iceberg numa tabela existente no Databricks Runtime 15.4 LTS e versões posteriores:

ALTER TABLE table_name SET TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Para detalhes sobre o name modo de mapeamento de colunas, veja Modos de mapeamento de colunas.

Ativar ou atualizar o suporte de leitura do Iceberg usando o REORG

Utilize REORG para ativar leituras do Iceberg se alguma das seguintes condições se verificar:

  • Ativaste vetores de eliminação na tua tabela.
  • 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.

Para permitir que o Iceberg lê e reescreva ficheiros de dados subjacentes, use REORG como o seguinte exemplo:

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 as leituras Iceberg estão ativadas para a sua tabela:

DESCRIBE EXTENDED catalog_name.schema_name.table_name;

Procure a secção Delta Uniform Iceberg na saída. Se esta secção estiver presente, as leituras Iceberg estão ativadas na sua tabela.

Em alternativa, pode utilizar SHOW TBLPROPERTIES:

SHOW TBLPROPERTIES catalog_name.schema_name.table_name;

Verifique as seguintes propriedades:

  • delta.enableIcebergCompatV2 = true
  • delta.universalFormat.enabledFormats = iceberg

Se ambas as propriedades estiverem presentes com estes valores, as leituras Iceberg estão ativadas.

Desativar leituras do Iceberg

Pode desativar as leituras do Iceberg removendo a definição da propriedade da tabela delta.universalFormat.enabledFormats:

ALTER TABLE table_name UNSET TBLPROPERTIES ('delta.universalFormat.enabledFormats');

As atualizações para as versões do leitor e do protocolo de escritor Delta Lake não podem ser desfeitas. Consulte Compatibilidade de recursos e protocolos do Delta Lake.

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. Este processo de geração de metadados utiliza o mesmo cálculo que completou a transação Delta Lake.

Você também pode acionar manualmente a geração de metadados do Iceberg. Consulte Acionar a conversão de metadados do Iceberg manualmente.

Para evitar latências de escrita associadas à geração de metadados, as tabelas Delta Lake com gravações frequentes podem agrupar várias gravações do Delta Lake numa única gravação nos 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. As submissões que iniciariam um segundo processo simultâneo de geração de metadados são efetuadas com êxito no Delta Lake, mas não acionam a geração assíncrona de metadados 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 as versões da tabela Delta e Icebergem .

Versões de tabelas Delta e Iceberg

Delta Lake e Iceberg permitem consultas temporais utilizando versões de tabela ou carimbos de data/hora armazenados em metadados de tabela.

Não se garante que as versões da tabela Delta Lake estejam alinhadas com as versões do Iceberg, nem pelo carimbo temporal da confirmação nem pelo identificador da versão. Para verificar a que versão de uma tabela Delta Lake corresponde uma determinada versão de uma tabela Iceberg, use as propriedades correspondentes da tabela. 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 uma tabela adiciona os seguintes campos aos metadados do Catálogo Unity e da tabela Iceberg para controlar o status de geração de metadados:

Campo de metadados Description
converted_delta_version A versão mais recente da tabela Delta Lake para a qual os metadados do Iceberg foram gerados com sucesso.
converted_delta_timestamp A marca temporal do commit mais recente do Delta Lake para o 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 Delta Uniform Iceberg seção retornada por DESCRIBE EXTENDED table_name.
  • Revisão de metadados de tabela com o Catalog Explorer.

Consulte a documentação do seu cliente leitor Iceberg para saber como revisar as propriedades da tabela 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

Pode ativar manualmente a geração de metadados do Iceberg para a versão mais recente da tabela Delta Lake. Esta operação é executada de forma síncrona. Quando está 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.

Esta operação não é necessária em condições normais. Utilize-o para recuperar dos seguintes problemas:

  • 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 para a tabela Delta Lake.

Use a sintaxe a seguir para acionar manualmente a geração de metadados do Iceberg:

MSCK REPAIR TABLE <table-name> SYNC METADATA

Consulte REPAIR TABLE.

Leia o Iceberg usando um caminho JSON de metadados

Alguns clientes Iceberg, como o BigQuery, exigem que forneça um caminho para ficheiros de metadados versionados para registar tabelas Iceberg externas. Cada vez que o Azure Databricks converte uma nova versão da tabela Delta Lake para Iceberg, cria um novo ficheiro 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 Azure Databricks, você pode revisar esse local de metadados seguindo um destes procedimentos:

  • Revisão da Delta Uniform Iceberg seção retornada por DESCRIBE EXTENDED table_name.
  • Revisão de metadados de tabela com o Catalog Explorer.

Importante

Os clientes de leitor Iceberg baseados em caminho podem exigir a atualização manual e a renovação dos caminhos JSON dos metadados para ler as versões atuais da tabela. Pode encontrar erros ao consultar tabelas Iceberg usando versões desatualizadas, pois os ficheiros de dados Parquet são removidos da tabela Delta Lake com VACUUM. Consulte VACUUM e a limpeza de metadados do Iceberg.

VACUUM e limpeza de metadados do Iceberg

Nas tabelas Delta Lake com leituras Iceberg ativadas, os metadados Iceberg acumulam-se no metadata/ diretório à medida que a tabela muda. OPTIMIZE e a conversão para operações Iceberg não apagam os metadados das versões mais antigas das tabelas. Só VACUUM o remove.

Disponível no Databricks Runtime 17.2 e posteriores, VACUUM elimina ficheiros não rastreados no diretório metadata/, mantendo os metadados Iceberg de que os clientes necessitam para ler as versões atuais da tabela. Esta limpeza é executada em modo FULL, que é o modo predefinido para VACUUM.

Para limpar os metadados das versões mais antigas da tabela, execute VACUUM após decorrido o período de retenção delta.deletedFileRetentionDuration:

VACUUM table_name FULL

Consulte Modo Full versus lite para mais informações sobre os modos de vácuo e Configurar a retenção de dados para consultas de viagem temporal para saber mais sobre o período de retenção.

Se a otimização preditiva estiver ativada, o Databricks trata automaticamente desta limpeza, por isso não precisa de correr VACUUM manualmente para a limpeza dos metadados do Iceberg.

Limitações

Existem as seguintes limitações para todas as tabelas com leituras Iceberg habilitadas:

  • 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.
  • Os vetores de eliminação não são suportados para leituras do Iceberg v2. No entanto, o Apache Iceberg v3 suporta vetores de exclusão. Veja Uso das características do Apache Iceberg v3 e vetores de eliminação no Databricks.
  • A leitura Iceberg não pode ser ativada em vistas materializadas nem em tabelas de streaming que utilizem IcebergCompatV2. Para vistas materializadas geridas pelo pipeline e tabelas de streaming, pode ativar o acesso externo ao Iceberg usando IcebergCompatV3. Veja Ativar o acesso a dados externos para tabelas de streaming e visualizações materializadas.
  • A tabela Delta Lake deve ser acedida pelo nome (não pelo caminho) para ativar automaticamente a geração de metadados do Iceberg.
  • As tabelas do Delta Lake com a leitura Iceberg ativada não suportam tipos VOID.
  • Algumas funcionalidades da tabela Delta Lake usadas pelas leituras Iceberg não são suportadas por alguns clientes leitores OpenSharing. Vê o que é o OpenSharing?.
  • Os destinatários do OpenSharing podem ler tabelas Delta Lake como tabelas Iceberg, com a leitura Iceberg ativada, utilizando a API REST Catalog do Iceberg. Este recurso está no Public Preview. Veja Permitir partilha com clientes externos do Iceberg.
  • O fluxo legado de dados de alterações funciona com clientes Delta quando as leituras do Iceberg estão ativadas, mas não é suportado no Iceberg. Consulte o feed de dados de alterações legadas para Delta Lake.