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

Dependendo do tipo de tabela Iceberg, o Snowflake oferece suporte ao uso de um local de armazenamento de volume externo com um provedor de nuvem diferente (em uma região diferente) daquele que hospeda sua conta Snowflake.

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 o Snowflake como catálogo Iceberg (tabela Iceberg gerenciada pelo Snowflake) oferece 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.

  • É possível usar a conectividade privada saída para acessar tabelas Iceberg gerenciadas pelo Snowflake e tabelas Iceberg que usam uma integração de catálogo para armazenamento de objetos, mas não é possível usá-la para acessar tabelas Iceberg que usam outras integrações de catálogo.

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.

  • O Snowflake processa um máximo de 1.000 arquivos de confirmação Delta cada vez que você atualiza uma tabela usando CREATE/ALTER … REFRESH. Se sua tabela tiver mais de 1.000 arquivos de confirmação, é possível fazer atualizações manuais adicionais. A cada vez, o processo de atualização continua de onde o último parou.

    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

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.

Armazenamento compatível com S3

As tabelas Iceberg que usam armazenamento compatível com S3 são tabelas entre regiões e não são compatíveis com as seguintes ações:

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: