Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Apache Iceberg é um formato de tabela open-source para cargas de trabalho analíticas que suporta funcionalidades como evolução de esquemas, viagem no tempo e particionamento oculto. Tal como o Delta Lake, o Iceberg cria uma camada de abstração que permite transações ACID sobre os seus dados em armazenamento de objetos.
O Azure Databricks suporta tabelas Iceberg que utilizam o formato de ficheiro Apache Parquet e as versões 1, 2 e 3 da especificação Iceberg. O Iceberg mantém a atomicidade e a consistência escrevendo novos arquivos de metadados para cada alteração na tabela. Todas as tabelas Iceberg no Azure Databricks seguem a especificação do formato de tabela Iceberg aberta. Veja a especificação da tabela Iceberg.
Um catálogo Iceberg é a camada superior da arquitetura de tabelas Iceberg que devolve os metadados atuais ao carregar uma tabela. O catálogo Iceberg trata de operações como criar, eliminar e renomear tabelas.
Azure Databricks suporta tabelas Iceberg geridas por:
- Catálogo Unity
- Catálogos estrangeiros, como AWS Glue, Hive Metastore ou Snowflake Horizon Catalog
Requirements
Para utilizar tabelas Apache Iceberg geridas ou externas, tem de cumprir os seguintes requisitos:
- Use um espaço de trabalho com o Unity Catalog ativado.
- Use Databricks Runtime 16.4 LTS ou superior.
Criar tabelas Iceberg no Catálogo Unity
As tabelas iceberg que cria no Unity Catalog são tabelas Iceberg geridas. Você pode criar essas tabelas usando:
- Databricks Runtime ou Databricks SQL
- Mecanismos externos compatíveis com Iceberg que suportam a API do Catálogo REST do Iceberg, como Apache Spark, Flink, Trino ou Kafka. Consulte Acesse tabelas do Azure Databricks a partir de clientes Apache Iceberg.
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.
- O agrupamento de líquidos melhora o desempenho das consultas.
- A otimização preditiva automatiza operações para reduzir custos de armazenamento e melhorar a velocidade das consultas.
- As visualizações materializadas suportam atualização incremental para manter os resultados atualizados à medida que os dados de origem mudam.
- tabelas de streaming suportam carregamento incremental de dados a partir do Kafka e armazenamento de objetos na nuvem usando SQLs do Databricks.
A Databricks recomenda usar a versão 1.9.2 e superior do cliente Iceberg para ler e escrever 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.
Tabelas Iceberg geridas por clones
Pode criar uma cópia completa e independente de uma tabela Iceberg gerida usando DEEP CLONE. Um clone profundo copia os ficheiros de dados e metadados da tabela para uma nova tabela Iceberg gerida no Unity Catalog. Veja Clone, uma tabela Iceberg gerida.
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. Consulte Limitações.
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
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.
- Para o Iceberg v2, as eliminações por posição e as eliminações baseadas na igualdade não são suportadas. 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
BINARYtipo.
- As vistas não são acessíveis a partir de motores Iceberg externos.
- Os seguintes tipos de dados não são suportados:
UUIDFixed(L)TIME- Aninhado
STRUCTcom campos obrigatórios
- Para limitações específicas do Iceberg v3, veja Limitações.
Limitações da tabela Iceberg gerenciada
As seguintes limitações aplicam-se especificamente às tabelas Iceberg gerenciadas:
- A Pesquisa por IA não é suportada. Consulte Databricks AI Search.
- Se usares tabelas Iceberg geridas como fonte de tabelas sincronizadas para o Lakebase, o processamento incremental com fluxo automático de dados de alteração não é suportado.
- 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.implwrite.data.pathwrite.metadata.pathwrite.format.defaultwrite.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.