O que é o Apache Iceberg no Azure Databricks?

Important

As tabelas Iceberg gerenciadas pelo Unity Catalog estão disponíveis no Public Preview no Databricks Runtime 16.4 LTS e superior. As tabelas Foreign Iceberg também estão em visualização pública no Databricks Runtime 16.4 LTS e superior.

As funcionalidades do Iceberg v3 estão disponíveis em Pré-visualização Pública no Databricks Runtime 18.0 e superiores. Consulte Usar recursos do Apache Iceberg v3.

Apache Iceberg é um formato de tabela open-source para cargas de trabalho analíticas. Ele suporta recursos como evolução de esquema, viagem no tempo e particionamento oculto. Como o Delta Lake, o Iceberg fornece uma camada de abstração que permite transações ACID em dados armazenados no armazenamento de objetos. O Azure Databricks suporta tabelas Iceberg que utilizam o formato de ficheiro Apache Parquet. O Iceberg mantém a atomicidade e a consistência escrevendo novos arquivos de metadados para cada alteração na tabela.

Um catálogo Iceberg é a camada superior da arquitetura de tabela Iceberg. Ele lida com operações como criar, eliminar e renomear tabelas. Sua principal responsabilidade é fornecer os metadados atuais quando uma tabela é carregada. Azure Databricks suporta tabelas Iceberg geridas por:

Todas as tabelas Iceberg no Azure Databricks seguem a especificação do formato de tabela Iceberg aberta. Veja a especificação da tabela Iceberg.

Criar tabelas Iceberg no Catálogo Unity

As tabelas Iceberg criadas no Unity Catalog são tabelas Iceberg gerenciadas. Você pode criar essas tabelas usando:

As tabelas Iceberg geridas estão totalmente integradas com as funcionalidades da plataforma Azure Databricks. O Unity Catalog gerencia tarefas do ciclo de vida, como expiração de instantâneos e compactação de arquivos nessas tabelas. As tabelas Iceberg gerenciadas também suportam clustering líquido, o que melhora o desempenho da consulta. A otimização preditiva automatiza essas tarefas para reduzir os custos de armazenamento e melhorar a velocidade da consulta. A Databricks recomenda o uso de clientes Iceberg 1.9.2 e superiores para ler e gravar no Unity Catalog.

Leia tabelas Iceberg gerenciadas por outros catálogos

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

As tabelas Iceberg externas são apenas de leitura no Azure Databricks e têm suporte limitado na plataforma.

Aceder a tabelas Iceberg usando sistemas externos

Você pode acessar todas as tabelas do Iceberg no Catálogo Unity usando a API do Catálogo REST do Iceberg. Esta API aberta suporta operações de leitura e escrita a partir de motores Iceberg externos em diferentes idiomas e plataformas. Consulte Acesse tabelas do Azure Databricks a partir de clientes Apache Iceberg.

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

Advertência

A venda automática de credenciais não é suportada em espaços de trabalho que utilizam armazenamento padrão. Consulte Limitações.

Evolução da partição

Com a evolução de partições, pode alterar o esquema de particionamento de uma tabela Apache Iceberg existente sem reescrever os dados. Os novos dados são escritos com o layout atualizado das partições e os dados existentes mantêm o layout original da partição. O Apache Iceberg acompanha as especificações da partição e aplica o filtro correto no momento da consulta. Ver evolução de partições no Apache Iceberg.

Observação

A evolução de partições é suportada em tabelas Iceberg geridas através de motores Iceberg externos usando o Iceberg REST Catalog, mas não através do SQL do Databricks. Transformações de partição baseadas em expressões, como years() e bucket() não são suportadas para tabelas Iceberg geridas. Veja as limitações da tabela Iceberg.

Para configurar o acesso externo, consulte Acesso às tabelas do Azure Databricks a partir de clientes Apache Iceberg.

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

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 intermédia:

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

Limitações da tabela Iceberg

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

  • As tabelas Iceberg suportam apenas o formato de arquivo Apache Parquet.
  • O Azure Databricks suporta as versões 1, 2 e 3 da especificação Iceberg.
    • Para limitações específicas da v3, consulte Limitações.
  • Não há suporte para exclusões de posição do Iceberg v2 e exclusões baseadas em igualdade. Em vez disso, o Azure Databricks suporta vetores de eliminação Iceberg v3 para eliminações ao nível da linha.
  • A ramificação e a marcação não são suportadas. Apenas a ramificação principal está acessível ao ler tabelas estrangeiras de Iceberg.
  • Particionamento:
    • A evolução da partição é suportada em tabelas Iceberg geridas somente quando se interage por motores Iceberg externos.
    • As tabelas Iceberg estrangeiras não suportam a evolução de partições.
    • Não há suporte para particionamento por BINARY tipo.
  • As visualizações não são suportadas.
  • Os seguintes tipos de dados não são suportados:
    • UUID
    • Fixed(L)
    • TIME
    • Aninhado STRUCT com campos obrigatórios

Limitações da tabela Iceberg gerenciada

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

  • A pesquisa vetorial não é suportada.
  • O Iceberg não suporta feed de mudança de dados. Como resultado, o processamento incremental não é suportado ao ler tabelas gerenciadas do Iceberg como fonte para:
    • Visualizações materializadas e tabelas de streaming
    • Definição de perfis de dados
    • Tabelas online
    • Lakebase
    • Classificação dos dados
  • As tabelas Iceberg gerenciadas só podem ser criadas se a otimização preditiva estiver habilitada para manutenção de tabelas.
  • As seguintes propriedades de tabela são gerenciadas pelo Unity Catalog e não podem ser definidas manualmente:
    • write.location-provider.impl
    • write.data.path
    • write.metadata.path
    • write.format.default
    • write.delete.format.default
  • O codec de compressão para alterar a compressão de tabela não é suportado. Todas as tabelas usam Zstd por padrão.
  • A partição por expressões (por exemplo, years(), months(), days(), hours(), bucket()) não é suportada.
  • Funcionalidades não suportadas no Apache Iceberg também não estão disponíveis para tabelas Iceberg geridas. Isto inclui colunas geradas por Delta Lake, Restrições sobre Azure Databricks e suporte Collation para Delta Lake.

Limitações da tabela Foreign Iceberg

As seguintes limitações aplicam-se especificamente às tabelas Iceberg externas:

  • A viagem no tempo é suportada apenas para instantâneos de Iceberg que já foram lidos anteriormente em Azure Databricks (ou seja, instantâneos onde foi executada uma instrução SELECT).
  • O uso de funções de transformação de bucket para particionamento no Iceberg pode degradar o desempenho das consultas quando são usados filtros condicionais.
  • Produtos de armazenamento em nuvem com hierarquização, como o Amazon S3, não são integrados a tabelas Iceberg de origem externa. Aceder a tabelas Iceberg estrangeiras no Azure Databricks pode restaurar dados arquivados em camadas de armazenamento de menor custo.
  • Em clusters de modo de acesso dedicado, operações e leituras em tabelas do Iceberg exigem REFRESH FOREIGN TABLE.