O que é o Apache Iceberg em Azure Databricks?

O Apache Iceberg é um formato de tabela de software livre para cargas de trabalho de análise. Ele dá suporte a recursos como evolução do esquema, viagem no tempo e particionamento oculto. Assim como o Delta Lake, o Iceberg cria uma camada de abstração que permite transações ACID sobre seus dados no armazenamento de objetos.

Azure Databricks dá suporte a tabelas Iceberg que usam o formato de arquivo Apache Parquet e as versões 1, 2 e 3 da especificação iceberg. Iceberg mantém a atomicidade e a consistência escrevendo novos arquivos de metadados para cada alteração de tabela. Todas as tabelas Iceberg no Azure Databricks seguem a especificação do formato de tabela Iceberg aberta. Consulte a especificação da tabela Iceberg.

Um catálogo de Iceberg é a camada de nível superior da arquitetura da tabela Iceberg que retorna os metadados atuais ao carregar uma tabela. O catálogo do Iceberg lida com operações como criar, remover e renomear tabelas.

Azure Databricks dá suporte a tabelas iceberg gerenciadas por:

Requisitos

Você deve atender aos seguintes requisitos:

  • Um espaço de trabalho com o Catálogo do Unity habilitado.
  • Use o Databricks Runtime 16.4 LTS ou superior para tabelas Iceberg gerenciadas e tabelas Iceberg externas.

Criar tabelas do Iceberg no Catálogo do Unity

As tabelas Iceberg que você cria no Unity Catalog são tabelas Iceberg gerenciadas. Você pode criar estas tabelas usando:

  • Databricks Runtime ou SQL do Databricks
  • Mecanismos externos compatíveis com Iceberg que dão suporte à API do Catálogo REST do Iceberg, como Apache Spark, Flink, Trino ou Kafka. Consulte as tabelas do Azure Databricks a partir de clientes do Apache Iceberg.

As tabelas iceberg gerenciadas são totalmente integradas aos recursos da plataforma Azure Databricks:

  • O Catálogo Unity gerencia tarefas do ciclo de vida, como expiração de snapshots e compactação de arquivos nessas tabelas.
  • As tabelas do Iceberg gerenciadas também dão suporte ao clustering líquido, o que melhora o desempenho das consultas.
  • A otimização preditiva automatiza as operações para reduzir os custos de armazenamento e melhorar a velocidade da consulta.
  • As tabelas de Iceberg gerenciadas também dão suporte a exibições materializadas e tabelas de streaming.

O Databricks recomenda usar clientes Iceberg 1.9.2 e superiores para ler e gravar no Catálogo do Unity.

Ler tabelas Iceberg gerenciadas por outros catálogos

Uma tabela Iceberg externa é uma tabela Iceberg gerenciada por um catálogo fora do Catálogo Unity. O catálogo externo armazena os metadados atuais da tabela. Azure Databricks usa Lakehouse Federation para recuperar metadados e ler a tabela do armazenamento de objetos.

As tabelas iceberg estrangeiras são somente leitura em Azure Databricks e têm suporte limitado à plataforma.

Acessar tabelas Iceberg usando sistemas externos

Você pode acessar todas as tabelas do Iceberg no Catálogo do Unity usando a API do Catálogo REST do Iceberg. Essa API aberta dá suporte a operações de leitura e gravação de mecanismos externos do Iceberg em diferentes linguagens e plataformas. Consulte as tabelas do Azure Databricks a partir de clientes do Apache Iceberg.

O Catálogo REST dá suporte à venda automática de credenciais, que fornece credenciais temporárias para mecanismos externos para acessar o armazenamento subjacente. Para obter mais informações, consulte Fornecimento de credenciais do Catálogo do Unity para acesso a sistemas externos.

Aviso

Não há suporte para venda automática de credenciais em workspaces que usam o armazenamento padrão. Confira Limitações.

Evolução da partição

Com a evolução da partição, você pode alterar o esquema de particionamento de uma tabela do Apache Iceberg existente sem reescrever dados. Novos dados são gravados com o layout de partição atualizado e os dados existentes retêm seu layout de partição original. O Apache Iceberg rastreia as especificações de partição e aplica o filtro correto no momento da consulta. Confira a evolução da partição para Apache Iceberg.

Observação

A evolução da partição é suportada em tabelas gerenciadas do Iceberg por meio de mecanismos externos do Iceberg utilizando o Catálogo REST do Iceberg, mas não por meio do Databricks SQL. Transformações de partição baseadas em expressão, como years() e bucket() não têm suporte para tabelas de Iceberg gerenciadas. Confira Limitações.

Para configurar o acesso externo, consulte Acessar tabelas do Azure Databricks de clientes Apache Iceberg.

Os exemplos a seguir mostram como usar a evolução da partição com o Spark SQL e a extensão Iceberg. Para obter a sintaxe de evolução da partição do Apache Iceberg e as transformações com suporte, consulte a DDL do Apache Iceberg Spark.

Adicionar um campo de partição

Para adicionar um novo campo de partição a uma tabela existente:

ALTER TABLE catalog.schema.table ADD PARTITION FIELD column_name;

Remover um campo de partição

Para remover um campo de partição existente de uma tabela:

ALTER TABLE catalog.schema.table DROP PARTITION FIELD column_name;

Substituir um campo de partição

Para trocar um campo de partição por outro sem uma repartição intermediária:

ALTER TABLE catalog.schema.table REPLACE PARTITION FIELD old_column WITH new_column;

Limitações

As seguintes limitações se aplicam às tabelas iceberg em Azure Databricks e estão sujeitas a alterações:

  • As tabelas iceberg dão suporte apenas ao formato de arquivo Apache Parquet.
  • Para o Iceberg v2, não há suporte para exclusões de posição e exclusões baseadas em igualdade. Em vez disso, o Azure Databricks dá suporte a vetores de exclusão do Iceberg v3 para exclusões em nível de linha.
  • A criação de ramificações e marcações não tem suporte. Somente a ramificação principal é acessível ao ler tabelas de Iceberg Estrangeiro.
  • Particionamento:
    • A evolução da partição tem suporte apenas em tabelas do Iceberg gerenciadas durante a interação com mecanismos do Iceberg externos.
    • Tabelas de Iceberg estrangeiras não dão suporte à evolução da partição.
    • Não há suporte para particionamento por BINARY tipo.
  • Views não são acessíveis por mecanismos externos do Iceberg.
  • Não há suporte para os seguintes tipos de dados:
    • UUID
    • Fixed(L)
    • TIME
    • Aninhado STRUCT com campos necessários
  • Para limitações específicas do Iceberg v3, consulte Limitações.

Limitações das tabelas gerenciadas do Iceberg

As seguintes limitações se aplicam especificamente às tabelas de Iceberg gerenciadas:

  • As tabelas de Iceberg gerenciadas só poderão ser criadas se a otimização preditiva estiver habilitada para manutenção de tabela.
  • As seguintes propriedades de tabela são gerenciadas pelo Catálogo do Unity e não podem ser definidas manualmente:
    • write.location-provider.impl
    • write.data.path
    • write.metadata.path
    • write.format.default
    • write.delete.format.default
  • Não há suporte para o codec de compressão para modificar a compressão de tabelas. Todas as tabelas usam zstd por padrão.
  • Não há suporte para particionamento por expressões (por exemplo, years(), months(), days(), hours(), ) bucket().
  • Recursos sem suporte no Apache Iceberg também não estão disponíveis para tabelas de Iceberg gerenciadas. Isso inclui colunas geradas do Delta Lake, Restrições no Azure Databricks e suporte de Ordenação para o Delta Lake.

Limitações da tabela do Iceberg Estrangeiro

As seguintes limitações se aplicam especificamente a tabelas de Iceberg estrangeiras:

  • A viagem no tempo tem suporte apenas para instantâneos de Iceberg que foram lidos anteriormente em Azure Databricks (ou seja, instantâneos em que uma instrução SELECT foi executada).
  • O uso de funções de transformação de compartimentos para particionamento do Iceberg pode prejudicar o desempenho das consultas quando filtros condicionais são usados.
  • Produtos de hierarquização de armazenamento em nuvem, como o Amazon S3, não são integrados a tabelas Iceberg externas. Acessar tabelas de Iceberg estrangeiras em Azure Databricks pode restaurar dados arquivados em camadas de armazenamento de menor custo.
  • Em clusters de modo de acesso dedicado, as leituras e as operações REFRESH FOREIGN TABLE nas tabelas do Iceberg exigem ALL PRIVILEGES.