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:
- Unity Catalog
- Catálogos externos, como AWS Glue, Hive metastore ou Snowflake Horizon Catalog.
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:
- Databricks Runtime ou Databricks SQL
- Mecanismos externos compatíveis com o Iceberg que suportam a API do catálogo REST do Iceberg, como Apache Spark, Flink, Trino ou Kafka. Consulte Acessar tabelas do Databricks a partir de clientes do Apache Iceberg.
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.
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.
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:
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:
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:
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
BINARYnã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:
UUIDFixed(L)TIMESTRUCTaninhado 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.
-
Se você usa tabelas Iceberg gerenciadas como fonte para tabelas sincronizadas para Lakebase, o processamento incremental com feed de dados de alterações automático não é compatível.
-
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.implwrite.data.pathwrite.metadata.pathwrite.format.defaultwrite.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
SELECTfoi 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 TABLEoperações nas tabelas Iceberg exigemALL PRIVILEGES.