Pular para o conteúdo principal

O que é o Apache Iceberg na Databricks?

O Apache Iceberg é um formato de tabela de código aberto para cargas de trabalho de analítica. Ele suporta recursos como evolução do esquema, viagem do tempo e particionamento oculto. Assim como o Delta Lake, o Iceberg cria uma camada de abstração que permite transações ACID nos dados no armazenamento de objetos.

A Databricks suporta 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 atomicidade e consistência escrevendo novos arquivos de metadados para cada alteração de tabela. Todas as tabelas Iceberg no Databricks seguem a especificação de formato de tabela Iceberg aberta. Veja a especificação da tabela Iceberg.

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

O Databricks suporta tabelas Iceberg gerenciadas por:

Requisitos

É preciso atender aos seguintes requisitos:

  • Um workspace com o Unity Catalog habilitado.
  • Use o Databricks Runtime 16.4 LTS ou acima para tabelas Iceberg gerenciadas e estrangeiras.

Criar tabelas Iceberg no Unity Catalog

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

Tabelas Iceberg gerenciadas estão totalmente integradas aos recursos da plataforma Databricks:

Databricks recomenda o uso de clientes Iceberg 1.9.2 e acima para ler e gravar no Unity Catalog.

Leia Iceberg tables gerenciar por outros catálogos

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

As tabelas Foreign Iceberg são somente leitura no Databricks e têm suporte limitado à plataforma.

Acesse as tabelas Iceberg usando sistemas externos.

O senhor pode acessar todas as tabelas do Iceberg no Unity Catalog usando a API REST Catalog do Iceberg. Essa API aberta oferece suporte a operações de leitura e gravação de mecanismos Iceberg externos em diferentes idiomas e plataformas. Consulte Acessar tabelas do Databricks a partir de clientes do 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 Unity Catalog credential vending for external system access.

atenção

A distribuição de credenciais não é compatível com espaços de trabalho que utilizam o armazenamento default . Consulte as limitações.

Evolução da partição

Com a evolução de partições, você pode alterar o esquema de particionamento de uma tabela existente do Apache Iceberg sem sobrescrever os dados. Novos dados são gravados com a disposição de partição atualizada e os dados existentes mantêm sua disposição de partição original. O Apache Iceberg rastreia as especificações de partição e aplica o filtro correto no momento da consulta. Veja a evolução das partições para o Apache Iceberg.

nota

A evolução de partições é suportada em tabelas Iceberg gerenciadas por meio de motores Iceberg externos que utilizam o Catálogo REST Iceberg, mas não por meio do Databricks SQL. Transformações de partição baseadas em expressão, como years() e bucket(), não são suportadas para tabelas Iceberg gerenciadas. Consulte Limitações.

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

Os exemplos a seguir mostram como usar a evolução de partições com o Spark SQL e a extensão Iceberg. Para obter informações sobre a sintaxe de evolução de partições do Apache Iceberg e as 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:

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

Solte um campo de partição

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

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

Substitua um campo de partição

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

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

Limitações

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

  • As tabelas do Iceberg suportam apenas o formato de arquivo Apache Parquet.

  • Para Iceberg v2, exclusões posicionais e exclusões baseadas em igualdade não são compatíveis. Em vez disso, o Databricks suporta vetores de exclusão do Iceberg v3 para exclusões em nível de linha.

  • A ramificação e a marcação não são suportadas. Somente o ramo principal pode ser acessado ao ler tabelas Iceberg estrangeiras.

  • Particionamento:

    • A evolução da partição é suportada nas tabelas do gerenciar Iceberg somente ao interagir com mecanismos externos do Iceberg.
    • As tabelas Iceberg estrangeiras não suportam a evolução da partição.
    • O particionamento por tipo BINARY não é suportado.
  • Views não são acessíveis a partir de engines Iceberg externos.

  • Os seguintes tipos de dados não são suportados:

    • UUID
    • Fixed(L)
    • TIME
    • STRUCT aninhado com campos obrigatórios
  • Para limitações específicas de Iceberg v3, consulte Limitações.

gerenciar Iceberg limitações da tabela

As limitações a seguir se aplicam especificamente às tabelas do gerenciar Iceberg:

  • AI Search não é compatível. Consulte Pesquisa de IA da Databricks.

  • gerenciar tabelas Iceberg só podem ser criadas se a otimização preditiva estiver habilitada para manutenção de tabelas.

  • As seguintes propriedades da 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 da tabela não é compatível. Todas as tabelas usam Zstd por default.

  • O particionamento por expressões (por exemplo, years(), months(), days(), hours(), bucket()) não é suportado.

  • Recursos não são suportados no Apache Iceberg e também não estão disponíveis para gerenciar tabelas Iceberg . Isso inclui colunas geradas pelo Delta Lake, restrições no Databricks e suporte a agrupamento para o Delta Lake.

Limitações da tabela Iceberg estrangeira

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

  • A viagem do tempo é suportada somente para Iceberg Snapshot que tenha sido lido anteriormente em Databricks (ou seja, Snapshot em que uma instrução SELECT foi executada).
  • O uso de funções de transformação de balde para o particionamento do Iceberg pode prejudicar o desempenho da consulta quando são usados filtros condicionais.
  • Os produtos de classificação por níveis de armazenamento em nuvem, como Amazon S3 , não estão integrados às tabelas estrangeiras Iceberg. O acesso a tabelas Iceberg estrangeiras no Databricks pode restaurar dados arquivados em camadas de armazenamento de baixo custo.
  • No clustering de modo de acesso dedicado, as leituras e REFRESH FOREIGN TABLE operações nas tabelas Iceberg exigem ALL PRIVILEGES.