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 que 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 em seus 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

Para usar tabelas gerenciadas ou externas do Apache Iceberg, você deve atender aos seguintes requisitos:

  • Utilize um workspace com o Unity Catalog ativado.
  • Use o Databricks Runtime 16.4 LTS ou superior.

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:

  • O Unity Catalog gerencia tarefas de ciclo de vida como expiração de snapshot e compactação de arquivos nestas tabelas.
  • O cluster líquido melhora o desempenho da consulta.
  • Otimização preditiva automatiza operações para reduzir os custos de armazenamento e melhorar a velocidade da consulta.
  • Visualizações materializadas oferecem suporte a refresh incremental para manter os resultados atualizados à medida que os dados de origem são alterados.
  • As tabelas de transmissão oferecem suporte ao carregamento incremental de dados do Kafka e do armazenamento de objetos na cloud usando o Databricks SQL.

Databricks recomenda o uso da versão de cliente 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.

Clonar tabelas Iceberg gerenciadas

É possível criar uma cópia completa e independente de uma tabela Iceberg gerenciada usando DEEP CLONE. Um clone profundo copia os arquivos de dados e metadados da tabela para uma nova tabela Iceberg gerenciada no Unity Catalog. Consulte Clonar uma tabela gerenciada do Iceberg.

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:

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.