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.

Para tabelas gerenciadas, você também deve atender ao seguinte requisito:

  • Um Workspace com compute serverless habilitado

A Databricks usa compute serverless para manter os metadados da tabela Iceberg para tabelas gerenciadas. O compute Serverless deve ter conectividade de rede com a cloud storage account que oferece suporte à tabela. Se um firewall protege a account de armazenamento, configure a conectividade de rede Serverless para que o compute Serverless possa acessá-la. A configuração necessária depende da sua cloud. Para mais informações, consulte Rede do plano de compute serverless.

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.

nota

Motores Iceberg externos não podem ler views definidas no Unity Catalog. Consulte Limitações.

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 gerenciadas usando o Iceberg​

Você pode criar uma cópia completa e independente de uma tabela gerenciada que usa o Iceberg com DEEP CLONE. Um clone profundo copia os arquivos de dados e metadados da tabela para uma nova tabela gerenciada usando o Iceberg no Unity Catalog. Consulte Clonar uma tabela gerenciada que usa o Iceberg.

Criar uma view materializada compatível com leitores Iceberg externos​

info

Visualização

As visualizações materializadas Iceberg gerenciadas estão em Pré-visualização Pública. Para habilitar este recurso, entre em contato com a equipe da sua account Databricks.

Você pode criar uma visualização materializada compatível com leitores Iceberg externos. Para criar um, use USING ICEBERG na instrução CREATE MATERIALIZED VIEW. Para a sintaxe completa, consulte CREATE MATERIALIZED VIEW (pipelines). Para ver todos os requisitos, consulte Habilitar o acesso a dados externos para tabelas de transmissão e visualizações materializadas.

SQL
CREATE MATERIALIZED VIEW <mv_name>
USING ICEBERG
AS
SELECT * FROM samples.nyctaxi.trips;

Após criar a view materializada, execute REPAIR TABLE com SYNC METADATA. Consulte REPAIR TABLE.

SQL
REPAIR TABLE <mv_name> SYNC METADATA;

Leitores Iceberg externos podem ler a view materializada, mas não podem gravar nela. Para ler a view materializada de um leitor Iceberg externo, consulte Habilitar acesso externo a dados para tabelas de transmissão e views materializadas.

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.
  • Motores Iceberg externos não conseguem ler views. Com o Unity Catalog, a API REST Catalog do Iceberg disponibiliza tabelas, mas não views.

  • 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.