Tabelas Iceberg

Uma tabela Iceberg usa 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

As tabelas Iceberg para Snowflake combinam o desempenho e a semântica de consulta de tabelas regulares do Snowflake com 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.

Snowflake oferece suporte a tabelas Iceberg que usam o formato de arquivo Apache Parquet.

Introdução

Para criar uma tabela Iceberg, comece configurando um volume externo. Para obter uma introdução ao uso de tabelas Iceberg no Snowflake, consulte Guia de início rápido: introdução às tabelas Iceberg.

Como funcionam as tabelas Iceberg

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.

As tabelas Iceberg não incorrem em custos de armazenamento do Snowflake. Para obter mais informações, consulte Faturamento.

Volumes externos

Um volume externo é um objeto Snowflake nomeado no nível da conta que armazena uma entidade de gerenciamento de identidade e acesso (IAM) para seu armazenamento externo em nuvem. O Snowflake se conecta com segurança ao seu armazenamento em nuvem com um volume externo para acessar dados da tabela, metadados Iceberg e arquivos de manifesto que armazenam o esquema da 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 para tabelas Iceberg.

Catálogo Iceberg

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 externo do Iceberg, como o AWS Glue, ou a arquivos de metadados do Iceberg no armazenamento de objetos.

Integrações de catálogo

Uma integração de catálogo é um objeto Snowflake nomeado no nível da conta que define a origem dos metadados e do esquema para uma tabela Iceberg quando você não usa o Snowflake como o catálogo Iceberg.

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

Para configurar uma integração de catálogo para tabelas Iceberg, consulte Configuração de uma integração de catálogo para tabelas Iceberg.

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.

Snowflake usa o parâmetro DATA_RETENTION_TIME_IN_DAYS para lidar com metadados de diferentes maneiras, dependendo do tipo de tabela Iceberg.

Nota

A especificação do número mínimo padrão de instantâneos com a history.expire.min-snapshots-to-keep propriedade de tabela não é compatível com nenhum tipo de tabela Iceberg.

Tabelas que usam Snowflake como catálogo Iceberg

Para esse tipo de tabela, o Snowflake gera metadados periodicamente e os grava nos arquivos Parquet da tabela em seu volume externo.

Snowflake usa o valor de DATA_RETENTION_TIME_IN_DAYS para determinar o seguinte:

  • Quando expirar os instantâneos de tabelas antigas para reduzir o tamanho dos metadados da tabela.

  • Por quanto tempo os metadados da tabela devem ser retidos para dar suporte ao Time Travel e ao cancelamento da tabela. Quando o período de retenção expira, o Snowflake exclui todos os metadados e instantâneos da tabela gravados para essa tabela do local do volume externo.

    Nota

    O Snowflake não é compatível com Fail-safe para tabelas Iceberg, porque os dados da tabela estão em um armazenamento externo em nuvem gerenciado por você. Para proteger os dados da tabela Iceberg, você deve configurar a proteção e recuperação de dados com seu provedor de nuvem.

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

Snowflake usa o valor de DATA_RETENTION_TIME_IN_DAYS para definir um período de retenção para Snowflake Time Travel e cancelar a tabela. Quando o período de retenção expira, o Snowflake não exclui os metadados ou instantâneos da tabela Iceberg do seu armazenamento externo em nuvem.

Para definir DATA_RETENTION_TIME_IN_DAYS para este tipo de tabela, o Snowflake recupera o valor de history.expire.max-snapshot-age-ms do arquivo de metadados atual e, em seguida, converte o valor em dias (arredondando para baixo).

Se o Snowflake não encontrar history.expire.max-snapshot-age-ms no arquivo de metadados ou não puder analisar o valor, ele definirá DATA_RETENTION_TIME_IN_DAYS como um valor padrão de 5 dias (o valor padrão do 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 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 não fatura sua conta pelo seguinte:

  • Custos de armazenamento da tabela Iceberg. Seu provedor de armazenamento em nuvem faz a cobrança diretamente pelo uso do armazenamento de dados.

  • Bytes ativos usados pelas tabelas Iceberg. No entanto, o Exibição TABLE_STORAGE_METRICS exibe ACTIVE_BYTES para tabelas Iceberg para ajudar você a controlar quanto armazenamento uma tabela ocupa.

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 Iceberg

Ao criar uma tabela Iceberg no Snowflake, você pode usar o Snowflake como o catálogo Iceberg ou pode usar uma integração de catálogo.

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

Uso do Snowflake como o catálogo Iceberg

Uso de uma integração de catálogo

Acesso de leitura

Acesso de gravação

❌ Para suporte completo da plataforma, você pode converter a tabela para usar Snowflake como catálogo.

Armazenamento de dados e metadados

Volume externo (armazenamento em nuvem)

Volume externo (armazenamento em nuvem)

Suporte completo à plataforma

Funciona com o SDK do catálogo Iceberg do Snowflake

Uso do Snowflake como o catálogo Iceberg

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

Uso de uma integração de catálogo

Uma tabela Iceberg que usa uma integração de catálogo oferece suporte limitado à plataforma Snowflake com acesso somente leitura. Os dados e metadados da tabela são armazenados em armazenamento em nuvem externo, que o Snowflake acessa usando um volume externo. Com esse tipo de tabela, o Snowflake usa a integração do catálogo para recuperar informações sobre os metadados e o esquema do Iceberg. Snowflake não assume nenhum gerenciamento de ciclo de vida.

Você pode usar esta opção para criar uma tabela Iceberg que usa um catálogo Iceberg externo, como AWS Glue, ou para criar uma tabela a partir de arquivos de metadados Iceberg no armazenamento de objetos. 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:

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

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

  • As tabelas Iceberg criadas a partir de arquivos no armazenamento de objetos não serão suportadas se as seguintes condições forem verdadeiras:

    • A tabela contém uma especificação de partição que define uma transformação de identidade.

    • A coluna de origem da especificação de partição não existe em um arquivo Parquet.

  • Para tabelas Iceberg que não são gerenciadas pelo Snowflake, o Time Travel para qualquer instantâneo gerado após a criação da tabela é suportada, desde que você atualize periodicamente a tabela antes que o instantâneo expire.

Formatos de arquivo

  • O suporte é limitado a arquivos Apache Parquet.

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

Volumes externos

  • Você deve acessar os locais de armazenamento em nuvem em volumes externos usando credenciais diretas. As integrações de armazenamento não são suportadas.

  • A relação de confiança deve ser configurada separadamente para cada volume externo criado.

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

Recursos Snowflake

  • Os seguintes recursos e ações não são atualmente suportados nas tabelas Iceberg:

    • Criação de um clone de uma tabela Iceberg. Além disso, os clones de bancos de dados e esquemas não incluem tabelas Iceberg.

    • Aplicação automática de tags usando o procedimento armazenado ASSOCIATE_SEMANTIC_CATEGORY_TAGS.

    • Evolução do esquema Snowflake. No entanto, as tabelas Iceberg que usam Snowflake como catálogo oferecem suporte à evolução do esquema Iceberg.

      Nota

      As tabelas criadas antes da versão do Snowflake 7.42 não são compatíveis com a evolução do esquema Iceberg.

    • Criação de tabelas Iceberg temporárias ou transitórias.

    • Replicação de tabelas Iceberg, volumes externos ou integrações de catálogo.

      Além disso, se um banco de dados primário contiver uma tabela Iceberg, a tabela Iceberg causará falha na operação de atualização. [1]

  • A consulta de dados históricos é compatível com tabelas Iceberg.

  • 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 e ALTER ICEBERG TABLE.

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

    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.

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 Snowflake como catálogo.