Tabelas Apache Iceberg™

As tabelas Apache Iceberg™ do Snowflake combinam o desempenho e a semântica de consulta das tabelas típicas do Snowflake com o armazenamento em nuvem externo que você gerencia. Elas são ideais para data lakes existentes que você não pode ou optou por não armazenar no Snowflake.

As tabelas Iceberg usam a especificação de formato aberto de tabela Apache Iceberg™, que fornece uma camada de abstração em arquivos de dados armazenados em formatos abertos e oferece suporte a recursos como:

  • Transações ACID (atomicidade, consistência, isolamento, durabilidade)

  • Evolução do esquema

  • Particionamento oculto

  • Instantâneos de tabela

O Snowflake aceita tabelas Iceberg que usam o formato de arquivo Apache Parquet™.

Introdução

Para começar com as tabelas Iceberg, consulte Tutorial: Crie sua primeira tabela Apache Iceberg™.

Como funciona

Esta seção fornece informações específicas para trabalhar com tabelas Iceberg no Snowflake. Para saber mais sobre a especificação do formato da tabela Iceberg, consulte a documentação oficial do Apache Iceberg e as Especificações da tabela Iceberg.

Armazenamento de dados

As tabelas Iceberg armazenam seus dados e arquivos de metadados em um local de armazenamento em nuvem externo (Amazon S3, Google Cloud Storage ou Azure Storage). O armazenamento externo não faz parte do Snowflake. Você é responsável por todo o gerenciamento do local de armazenamento em nuvem externo, incluindo a configuração da proteção e recuperação de dados. O Snowflake não fornece armazenamento Fail-safe para tabelas Iceberg.

O Snowflake se conecta ao seu local de armazenamento usando um volume externo, e as tabelas Iceberg não incorrem em custos de armazenamento Snowflake. Para obter mais informações, consulte Faturamento.

Para saber mais sobre armazenamento para tabelas Iceberg, consulte Armazenamento para tabelas Apache Iceberg™.

Volume externo

Um volume externo é um objeto Snowflake nomeado ao nível de conta, que você usa para conectar o Snowflake ao seu armazenamento em nuvem externo para tabelas Iceberg. Um volume externo armazena uma entidade de gerenciamento de identidade e acesso (IAM) para seu local de armazenamento. O Snowflake usa a entidade de IAM para se conectar com segurança ao seu armazenamento e acessar dados de tabela, metadados Iceberg e arquivos de manifesto que armazenam o esquema de tabela, partições e outros metadados.

Um único volume externo pode oferecer suporte a uma ou mais tabelas Iceberg.

Para configurar um volume externo para tabelas Iceberg, consulte Configuração de um volume externo.

Catálogo

Um catálogo Iceberg permite que um mecanismo de computação gerencie e carregue tabelas Iceberg. O catálogo forma a primeira camada de arquitetura na especificação da tabela Iceberg e deve oferecer suporte ao seguinte:

  • Armazenar o ponteiro de metadados atual para uma ou mais tabelas Iceberg. Um ponteiro de metadados mapeia o nome de uma tabela para o local do arquivo de metadados atual dessa tabela.

  • Executar operações atômicas para que você possa atualizar o ponteiro de metadados atual de uma tabela.

Para saber mais sobre os catálogos Iceberg, consulte a documentação do Apache Iceberg.

O Snowflake oferece suporte a diferentes opções de catálogo. Por exemplo, você pode usar o Snowflake como o catálogo Iceberg ou usar uma integração de catálogo para conectar o Snowflake a um catálogo Iceberg externo.

Integração de catálogo

Uma integração de catálogo é um objeto Snowflake nomeado no nível de conta que armazena informações sobre como os metadados da tabela são organizados para os seguintes cenários:

  • Quando você não usa o Snowflake como catálogo Iceberg. Por exemplo, você precisa de uma integração de catálogo, se sua tabela for gerenciada pelo AWS Glue.

  • Quando você deseja fazer a integração ao Snowflake Open Catalog para:

    • Consultar uma tabela Iceberg no Snowflake Open Catalog usando Snowflake.

    • Sincronizar uma tabela Iceberg gerenciada pelo Snowflake com o Snowflake Open Catalog para que mecanismos de computação de terceiros possam consulta a tabela.

Uma única integração de catálogo pode oferecer suporte a uma ou mais tabelas Iceberg que usam o mesmo catálogo externo.

Para configurar uma integração de catálogo, consulte Configurar uma integração de catálogo.

Metadados e instantâneos

Iceberg usa um modelo de consulta baseado em instantâneo, onde os arquivos de dados são mapeados usando arquivos de manifesto e metadados. Um instantâneo representa o estado de uma tabela em um determinado momento e é usado para acessar o conjunto completo de arquivos de dados na tabela.

Para saber mais sobre metadados da tabela e suporte a Time Travel, consulte Metadados e retenção para tabelas Apache Iceberg™.

Suporte entre nuvens/entre regiões

O suporte entre nuvens/entre regiões depende do tipo de tabela Iceberg.

Tipo de tabela

Suporte entre nuvens/entre regiões

Notas

Tabelas que usam um catálogo externo com uma integração de catálogo

Se o local de armazenamento ativo do seu volume externo não estiver no mesmo provedor de nuvem ou na mesma região da sua conta Snowflake, as seguintes limitações serão aplicadas:

  • Você não pode usar a função SYSTEM$GET_ICEBERG_TABLE_INFORMATION para recuperar informações sobre o instantâneo atualizado mais recente.

  • Você não pode converter a tabela para usar o Snowflake como catálogo.

Se sua conta Snowflake e seu volume externo estiverem em regiões diferentes, sua conta externa de armazenamento em nuvem incorrerá em custos de saída quando você consultar a tabela.

Tabelas que usam o Snowflake como o catálogo

Seu volume externo deve usar um local de armazenamento ativo com o mesmo provedor de nuvem (na mesma região) que hospeda sua conta Snowflake.

Se o local ativo não estiver na mesma região, a instrução CREATE ICEBERG TABLE retornará um erro do usuário.

Faturamento

O Snowflake fatura sua conta pelo uso do warehouse virtual (computação) e pelos serviços de nuvem quando você trabalha com tabelas Iceberg. A Snowflake também cobra sua conta se você usar atualização automática.

A Snowflake não fatura sua conta pelo seguinte:

Nota

Se sua conta Snowflake e seu volume externo estiverem em regiões diferentes, sua conta externa de armazenamento em nuvem incorrerá em custos de saída quando você consultar a tabela.

Opções de catálogo

O Snowflake oferece suporte às seguintes opções de catálogo Iceberg:

A tabela a seguir resume as diferenças entre essas opções de catálogo.

Usar o Snowflake como catálogo

Use um catálogo externo

Acesso de leitura

Acesso de gravação

Para suporte à plataforma Snowflake, você pode converter a tabela para usar o Snowflake como catálogo.

Armazenamento de dados e metadados

Volume externo (armazenamento em nuvem)

Volume externo (armazenamento em nuvem)

Suporte à plataforma Snowflake

Integra-se com o Snowflake Open Catalog

Você pode sincronizar uma tabela gerenciada pelo Snowflake com o Open Catalog para consulta uma tabela usando outros mecanismos de computação.

Você pode usar o Snowflake para consultar tabelas Iceberg gerenciadas pelo Open Catalog.

Funciona com o SDK do catálogo Snowflake

Usar o Snowflake como catálogo

Uma tabela Iceberg que usa Snowflake como catálogo Iceberg fornece suporte completo à plataforma Snowflake com acesso de leitura e gravação. Os dados e metadados da tabela são armazenados em armazenamento em nuvem externo, que o Snowflake acessa usando um volume externo. Snowflake cuida de toda a manutenção do ciclo de vida, como compactação, da tabela.

Como funcionam as tabelas Iceberg que usam o Snowflake como catálogo Iceberg

Use um catálogo externo

Uma tabela Iceberg que use um catálogo externo oferece suporte limitado à plataforma Snowflake com acesso somente leitura. Com esse tipo de tabela, o Snowflake usa uma integração de catálogo para recuperar informações sobre os metadados e o esquema Iceberg.

Você pode usar essa opção para criar uma tabela Iceberg para as seguintes fontes:

  • Catálogo de dados do AWS Glue

  • Arquivos de metadados do Iceberg no armazenamento de objetos

  • Arquivos de tabela delta no armazenamento de objetos

  • Open Catalog

  • Catálogo REST remoto Iceberg

Snowflake não assume nenhum gerenciamento de ciclo de vida.

Os dados e metadados da tabela são armazenados em armazenamento em nuvem externo, que o Snowflake acessa usando um volume externo.

O diagrama a seguir mostra como uma tabela Iceberg usa uma integração de catálogo com um catálogo Iceberg externo.

Como funcionam as tabelas que usam uma integração de catálogo

Considerações e limitações

As seguintes considerações e limitações se aplicam às tabelas Iceberg e estão sujeitas a alterações:

Nuvens e regiões

  • As tabelas Iceberg estão disponíveis para todas as contas Snowflake, em todas as plataformas de nuvem e em todas as regiões, exceto na região da China.

  • As tabelas entre nuvens/regiões são compatíveis quando você usa um catálogo externo. Para obter mais informações, consulte Suporte entre nuvens/entre regiões.

Iceberg

  • As versões 1 e 2 da especificação Apache Iceberg são suportadas, excluindo os seguintes recursos:

    • Exclusões em nível de linha (exclusões de posição ou exclusões de igualdade). No entanto, tabelas que usam o Snowflake como catálogo oferecem suporte a instruções DELETE do Snowflake.

    • Usando a history.expire.min-snapshots-to-keep propriedade da tabela para especificar o número mínimo padrão de instantâneos a serem mantidos. Para obter mais informações, consulte Metadados e instantâneos.

  • O particionamento Iceberg com a função de transformação bucket afeta o desempenho de consultas que usam cláusulas condicionais para filtrar resultados.

  • Para tabelas Iceberg que não são gerenciadas pelo Snowflake, esteja ciente do seguinte:

    • O Time Travel para qualquer instantâneo gerado após a criação da tabela é compatível, desde que você atualize periodicamente a tabela antes que o instantâneo expire.

    • Não há suporte para a conversão de uma tabela que tenha uma coluna de partição de identidade não materializada. Uma coluna de partição de identidade não materializada é criada quando uma tabela define uma transformação de identidade usando uma coluna de origem que não existe em um arquivo Parquet.

Formatos de arquivo

  • As tabelas Iceberg são compatíveis com arquivos Apache Parquet.

  • Arquivos Parquet que usam o tipo lógico inteiro não assinado não são aceitos.

Volumes externos

  • Você não pode acessar os locais de armazenamento em nuvem em volumes externos usando uma integração de armazenamento.

  • Você deve configurar uma relação de confiança separado para cada volume externo que criar.

Arquivos de metadados

  • Os arquivos de metadados não identificam o instantâneo mais recente de uma tabela Iceberg.

  • Você não pode modificar o local dos arquivos de dados ou instantâneos usando o comando ALTER ICEBERG TABLE. Para modificar qualquer uma dessas configurações, você deve recriar a tabela (usando a sintaxe CREATE OR REPLACE ICEBERG TABLE).

  • Para tabelas que usam um catálogo externo:

    • Certifique-se de que os arquivos de manifesto não contenham duplicatas. Se houver arquivos duplicados no mesmo instantâneo, o Snowflake retornará um erro que inclui o caminho do arquivo duplicado.

    • Não é possível criar uma tabela se os metadados Parquet contiverem caracteres UTF-8 inválidos. Certifique-se de que seus metadados Parquet sejam compatíveis com UTF-8.

  • O Snowflake detecta corrupções e inconsistências nos metadados do Parquet produzidos fora do Snowflake e revela problemas por meio de mensagens de erro.

    É possível criar, atualizar ou consultar tabelas gerenciadas externamente (ou convertidas), mesmo que os metadados da tabela sejam inconsistentes. Ao escrever dados Iceberg, certifique-se de que as estatísticas de metadados da tabela (por exemplo, RowCount ou NullCount) correspondam ao conteúdo dos dados.

  • Para tabelas que usam o Snowflake como catálogo, o Snowflake processa instruções DDL individualmente e produz metadados de uma maneira que pode ser diferente de outros catálogos. Para obter mais informações, consulte Instruções DDL.

Clustering

O suporte ao clustering depende do tipo de tabela Iceberg.

Tipo de tabela

Notas

Tabelas que usam Snowflake como catálogo Iceberg

Defina uma chave de clustering usando o comando CREATE ICEBERG TABLE ou ALTER ICEBERG TABLE. Para definir ou gerenciar uma chave de clustering, consulte CREATE ICEBERG TABLE (Snowflake como o catálogo Iceberg) e ALTER ICEBERG TABLE.

Tabelas que usam um catálogo externo

Clustering não é suportado.

Tabelas convertidas

O Snowflake apenas clusteriza arquivos se eles tiverem sido criados após a conversão da tabela ou se os arquivos tiverem sido modificados usando uma instrução DML.

Delta

  • Os fluxos Snowflake não são compatíveis com tabelas Iceberg criadas a partir de arquivos de tabela Delta com colunas de partição. No entanto, os fluxos apenas de inserção para tabelas criadas a partir de arquivos Delta sem colunas de partição são compatíveis.

  • Tabelas dinâmicas não são compatíveis com tabelas Iceberg criadas a partir de arquivos de tabela Delta.

  • Snowflake não oferece suporte à criação de tabelas Iceberg a partir de definições de tabela Delta no AWS Glue Data Catalog.

  • Arquivos Parquet (arquivos de dados para tabelas Delta) que usam qualquer um dos seguintes recursos ou tipos de dados não são compatíveis:

    • Campo IDs.

    • O tipo de dados INTERVAL.

    • O tipo de dados DECIMAL com precisão maior que 38.

    • Os tipos LIST ou MAP com representação de um ou dois níveis.

    • Tipos inteiros sem sinal (INT(signed = false)).

    • O tipo de dados FLOAT16.

    Para obter mais informações sobre os tipos de dados Delta e tabelas Iceberg, consulte Tipos de dados Delta.

  • As operações de atualização durante CREATE e ALTER … REFRESH podem processar no máximo 1.000 arquivos de confirmação Delta por operação.

    Nota

    O Snowflake usa arquivos de ponto de verificação Delta ao criar uma tabela Iceberg. O limite de 1.000 arquivo de confirmação se aplica somente a confirmações após o último ponto de verificação.

  • Não há suporte para gerar metadados do Iceberg usando a função SYSTEM$GET_ICEBERG_TABLE_INFORMATION.

  • Os seguintes recursos do Delta Lake não são compatíveis no momento: rastreamento de linhas, arquivos vetoriais de exclusão, arquivos de dados de alteração, metadados de alteração, DataChange, CDC e evolução de protocolo.

Atualização automática

  • Quando a atualização automática está habilitada, você não pode atualizar manualmente os metadados da tabela. Para executar uma atualização manual, primeiro desative a atualização automática.

  • Para integrações de catálogo criadas antes do Snowflake versão 8.22, você deve definir manualmente o parâmetro REFRESH_INTERVAL_SECONDS antes de habilitar a atualização automática em tabelas que dependem dessa integração de catálogo. Para obter instruções, consulte ALTER CATALOG INTEGRATION … SET AUTO_REFRESH.

  • Certifique-se de que o novo snapshot da tabela seja um objeto secundário direto do snapshot da tabela atual. Caso contrário, a atualização automatizada entra no estado STOPPED. Para recuperar a atualização automatizada quando isso ocorrer, consulte Recuperação de erros.

  • A atualização automatizada não é aceita quando você usa uma integração de catálogo para armazenamento de objeto.

  • Manifestos da versão 1 do Iceberg sem uma coluna de número de sequência não são aceitos no momento.

Acesso de clientes terceiros aos dados e metadados do Iceberg

  • Clientes de terceiros não podem anexar, excluir ou atualizar dados em tabelas Iceberg que usam o Snowflake como catálogo.

Recursos não compatíveis

Os seguintes recursos do Snowflake não são aceitos atualmente para todas as tabelas Iceberg:

Os seguintes recursos não são aceitos para tabelas Iceberg que usam um catálogo externo: