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:
- Unity Catalog
- Catálogos externos, como AWS Glue, Hive metastore ou Snowflake Horizon Catalog.
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:
- 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.
- Tabelas Iceberg gerenciadas também suportam liquid clustering, o que melhora o desempenho da consulta.
- Otimização preditiva automatiza operações para reduzir os custos de armazenamento e melhorar a velocidade da consulta.
- Tabelas Iceberg gerenciadas também suportam visualizações materializadas e tabelas de transmissão em fluxo.
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.
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.
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.
-
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.