Armazenamento do Snowflake para tabelas Apache Iceberg™

O Snowflake é compatível com o armazenamento do Snowflake para tabelas Apache Iceberg™.

Assim como as tabelas padrão do Snowflake, esse recurso permite criar tabelas Iceberg gerenciadas pelo Snowflake no Snowflake. Com essa opção, o Snowflake armazena e gerencia os arquivos de tabela Iceberg para você usando o armazenamento (interno) do Snowflake, para que você não precise configurar o acesso ao armazenamento em nuvem externo.

Esse recurso funciona com o Snowflake Horizon Catalog, para que você possa usar um mecanismo de consulta externo para se conectar a uma tabela Iceberg que usa o armazenamento do Snowflake. Para obter mais informações, consulte Acessar tabelas Apache Iceberg™ com um mecanismo externo por meio do Snowflake Horizon Catalog. Além disso, você pode consultar essas mesmas tabelas no Snowflake.

Nota

Esse recurso está disponível atualmente apenas para contas hospedadas na Amazon Web Services (AWS) ou no Azure. Esse recurso não está disponível em regiões governamentais ou na República Popular da China.

Como funciona o armazenamento do Snowflake

Quando você cria uma tabela Iceberg com o armazenamento do Snowflake, o Snowflake gerencia todos os arquivos de dados e metadados internamente. Você não precisa configurar um volume externo nem conceder ao Snowflake acesso ao seu armazenamento em nuvem.

Criar uma tabela Iceberg com o armazenamento do Snowflake

CREATE ICEBERG TABLE my_iceberg_table_defaults (col1 int)
  CATALOG = SNOWFLAKE
  EXTERNAL_VOLUME = SNOWFLAKE_MANAGED;

Tabela TRANSIENT explícita com armazenamento gerenciado pelo Snowflake:

CREATE TRANSIENT ICEBERG TABLE my_iceberg_table_internal (col1 int)
  CATALOG = SNOWFLAKE
  EXTERNAL_VOLUME = SNOWFLAKE_MANAGED;
  • CATALOG deve ser SNOWFLAKE para esse modelo de armazenamento. Se o catálogo padrão da sua conta for o Snowflake, você poderá omitir CATALOG.

  • EXTERNAL_VOLUME deve ser SNOWFLAKE_MANAGED quando você está usando o armazenamento do Snowflake. Se o seu volume externo padrão for SNOWFLAKE_MANAGED, você poderá omitir EXTERNAL_VOLUME.

O volume externo de SNOWFLAKE_MANAGED

EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED' seleciona o armazenamento fornecido pelo Snowflake para a tabela. SNOWFLAKE_MANAGED é um valor reservado, não um objeto de volume externo criado pelo usuário. Você não executa CREATE EXTERNAL VOLUME para esse caminho.

Para tabelas Iceberg que armazenam arquivos em seu armazenamento em nuvem, você cria um volume externo, concede USAGE e define EXTERNAL_VOLUME para o nome desse volume. Para obter instruções, consulte Configuração de um volume externo.

Tabelas permanentes e transitórias

As tabelas Iceberg que usam o armazenamento do Snowflake podem ser permanentes ou transitórias:

  • Permanente (padrão): os dados da tabela são protegidos por Fail-safe, o mesmo recurso de recuperação de dados de 7 dias que o Snowflake fornece para tabelas padrão.

  • Transitória: os dados da tabela não são protegidos por Fail-safe. O comportamento de armazenamento e do Time Travel segue o das tabelas transitórias no Snowflake. As tabelas transitórias não incorrem em custos de armazenamento do Fail-safe.

Use a palavra-chave TRANSIENT na instrução CREATE ICEBERG TABLE para criar uma tabela Iceberg transitória.

Nota

As tabelas Iceberg transitórias são compatíveis apenas com o armazenamento do Snowflake. Não é possível criar uma tabela Iceberg transitória que use um volume externo gerenciado pelo cliente.

Dica

Para verificar se uma tabela Iceberg existente é permanente ou transitória, execute SHOW TABLES e observe a coluna kind. O valor é TRANSIENT para as tabelas transitórias e TABLE para as permanentes.

Catálogo padrão e volume externo

Se você omitir CATALOG e EXTERNAL_VOLUME na instrução, o Snowflake os resolverá a partir dos padrões de esquema, banco de dados e conta (o esquema substitui o banco de dados, o banco de dados substitui a conta). Quando o catálogo efetivo é o Snowflake (CATALOG = 'SNOWFLAKE'), o volume externo padrão é SNOWFLAKE_MANAGED, a menos que um padrão diferente seja definido em um nível inferior. Para obter mais informações, consulte Definir um catálogo padrão no nível da conta, do banco de dados ou do esquema e Definir um volume externo padrão no nível da conta, do banco de dados ou do esquema.

Quando você define CATALOG = 'SNOWFLAKE' explicitamente, o volume externo padrão é SNOWFLAKE_MANAGED, a menos que você o substitua por EXTERNAL_VOLUME ou por um padrão de esquema, banco de dados ou conta que nomeie outro volume.

Replicação

Você pode replicar tabelas Iceberg que usam o armazenamento do Snowflake utilizando um grupo de replicação ou failover. Para habilitar a replicação dessas tabelas, você deve primeiro habilitar a replicação para tabelas Iceberg gerenciadas pelo Snowflake seguindo as etapas em Configuração da replicação para tabelas Apache Iceberg™ gerenciadas pelo Snowflake.

Ao contrário das tabelas Iceberg gerenciadas pelo Snowflake padrão, você não precisa incluir EXTERNAL VOLUMES na lista OBJECT_TYPES do seu grupo de replicação ou failover. O Snowflake gerencia automaticamente o armazenamento para tabelas replicadas que usam o volume externo SNOWFLAKE_MANAGED.

Por exemplo, crie um grupo de failover que replique um banco de dados contendo tabelas Iceberg que usam o armazenamento do Snowflake:

CREATE FAILOVER GROUP my_iceberg_fg
  OBJECT_TYPES = DATABASES
  ALLOWED_DATABASES = my_iceberg_database
  ALLOWED_ACCOUNTS = myorg.my_account_1;

Considerações sobre replicação

  • A replicação para contas hospedadas no Google Cloud Platform (GCP) não é compatível. O Snowflake ignora tabelas Iceberg que usam o armazenamento do Snowflake durante operações de atualização quando a conta de destino está hospedada no GCP.

  • Se você criou tabelas Iceberg durante a versão preliminar privada usando um volume externo diferente de SNOWFLAKE_MANAGED, o Snowflake migra automaticamente a tabela replicada na conta secundária para usar o volume SNOWFLAKE_MANAGED. Observe o seguinte sobre essa migração:

    • Se você incluir EXTERNAL VOLUMES na lista OBJECT_TYPES do grupo de replicação ou failover, o volume externo da versão preliminar privada será replicado para a conta secundária, mas não será anexado à tabela. Todos os usos do volume externo da versão preliminar privada na conta secundária serão bloqueados.

    • A Snowflake recomenda que você descarte todas as tabelas Iceberg que usam um volume externo da versão preliminar privada e as recrie usando EXTERNAL_VOLUME = SNOWFLAKE_MANAGED antes de habilitar a replicação.

Faturamento

O Snowflake cobra da sua conta o seguinte uso:

Custo de armazenamento

  • O Snowflake cobra por cada byte armazenado no Snowflake.

    O Snowflake agrega o uso de armazenamento para tabelas Iceberg que usam armazenamento do Snowflake na coluna STORAGE_BYTES do Exibição STORAGE_USAGE, juntamente com o uso de armazenamento para tabelas que não são Iceberg. Somente os arquivos que são confirmados no catálogo são incluídos em STORAGE_BYTES. O Snowflake não cobra por confirmações abandonadas.

    O custo para esse uso de armazenamento é descrito na Tabela 3(a) da tabela de consumo de serviços do Snowflake no site do Snowflake.

Custo da solicitação

Nota

Sempre que você usa um mecanismo de consulta por meio do Horizon Catalog para acessar tabelas do Iceberg armazenadas no Snowflake, o mecanismo de consulta é considerado um mecanismo de consulta externo. Quando você usa um mecanismo de consulta externo para acessar essas tabelas, o Snowflake cobra esse acesso da sua conta.

A lista a seguir descreve alguns casos em que mecanismos de consulta externos acessam tabelas do Iceberg armazenadas no Snowflake:

  • Mecanismos do Snowflake que acessam a tabela por meio do Horizon Catalog de outra conta Snowflake. Por exemplo, se uma tabela for gerenciada pela conta Snowflake A, mas você acessar a tabela a partir do mecanismo do Snowflake na conta B por meio do Horizon Catalog, você será cobrado por esse acesso. Você é cobrado por esse acesso porque o mecanismo do Snowflake na conta B é um mecanismo de consulta externo.

  • Mecanismos de consulta de terceiros que você implanta na rede Snowflake usando Snowflake Container Services. Quando você usa esses mecanismos por meio do Horizon Catalog para acessar a tabela, o mecanismo é externo e as solicitações são cobradas da mesma forma que outros mecanismos de consulta de terceiros.

  • Mecanismos de consulta de terceiros que você implanta fora do Snowflake e usa para se conectar à tabela por meio do Horizon Catalog.

O Snowflake não cobra sua conta quando você usa o mecanismo de consulta do Snowflake para acessar diretamente essas tabelas do Iceberg, o que significa que você não as acessa pelo Horizon Catalog. Por exemplo, se uma tabela for gerenciada pela conta A e você usar o mecanismo do Snowflake na conta A para acessar a tabela, você não será cobrado por esse acesso.

  • Quando você usa um mecanismo de consulta externo por meio do Snowflake Horizon Catalog para acessar tabelas do Iceberg que usam o armazenamento do Snowflake, o Snowflake cobra da sua conta uma taxa por solicitação para cada solicitação HTTP enviada ao sistema de armazenamento subjacente. A taxa depende do tipo de solicitação:

    • Operações PUT, COPY, POST, PATCH e LIST, que são cobradas como «classe 1».

    • Operações GET e SELECT, que são cobradas como «classe 2».

    Para visualizar a contagem de solicitações para esses tipos de operação, use a visualização do uso da conta STORAGE_REQUEST_HISTORY. Este uso é faturado nas SKUs STORAGE_REQUEST-1 e STORAGE_REQUEST-2 no relatório de faturamento.

    Essa taxa é descrita na Tabela 3(g) da tabela de consumo de serviços do Snowflake.

Custo de transferência de dados

Conectividade privada

Quando você usa um mecanismo de consulta externo para acessar tabelas Iceberg que usam armazenamento do Snowflake, é possível configurar a conectividade privada para que o tráfego não passe pela internet pública.

Para obter instruções de configuração, consulte Para volumes de armazenamento gerenciados pelo Snowflake.

Considerações e limitações

Considere o seguinte ao trabalhar com tabelas Iceberg que usam armazenamento do Snowflake.

Suporte ao provedor de nuvem

Esse recurso está disponível atualmente apenas para contas hospedadas na Amazon Web Services (AWS) ou no Microsoft Azure. Esse recurso não está disponível em regiões governamentais ou na República Popular da China.

Criptografia

As tabelas Iceberg que usam armazenamento do Snowflake são compatíveis apenas com criptografia do lado do servidor (server-side encryption, SSE). Chaves gerenciadas pelo cliente (customer-managed keys, CMK) não são compatíveis, mesmo que sua conta tenha o Tri-Secret Secure ativado.

Comportamento de clonagem

Aviso

A tabela Iceberg que você cria usa credenciais fornecidas pelo catálogo. Quando você clona uma tabela Iceberg que usa credenciais fornecidas pelo catálogo, a tabela clonada compartilha a mesma localização base da tabela de origem. É possível utilizar as mesmas credenciais para acessar o local base compartilhado; portanto, a tabela clonada tem acesso de gravação à tabela de origem.

Para tabelas que usam armazenamento gerenciado pelo Snowflake (EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED'), CREATE ICEBERG TABLE ... CLONE só terá sucesso quando a tabela de origem e a nova tabela forem ambas transitórias ou permanentes. Se uma for transitória e a outra for permanente, a instrução falhará.

Tabela de origem

Clone

Resultado

Transitória

Transitória

Com suporte

Permanente

Permanente

Com suporte

Transitória

Permanente

Sem suporte

Permanente

Transitória

Sem suporte

Para obter a sintaxe do comando e mais informações sobre o comportamento de clonagem, consulte CREATE ICEBERG TABLE … CLONE em CREATE ICEBERG TABLE (Snowflake como o catálogo Iceberg) e Clonagem e tabelas Apache Iceberg™.

Ingestão de dados

Você pode ingerir dados em tabelas Iceberg que usam o armazenamento do Snowflake usando os seguintes métodos:

  • Snowpipe: Use o Snowpipe para carregar dados de arquivos no armazenamento em nuvem usando COPY INTO. O Snowpipe funciona com tabelas Iceberg permanentes e transitórias.

  • Snowpipe Streaming: Use o alto desempenho do Snowpipe Streaming para ingerir dados de streaming. O Snowpipe Streaming funciona com tabelas Iceberg permanentes e transitórias.