Arquitetura de alto desempenho do Snowpipe Streaming com tabelas Apache Iceberg™

O Snowpipe Streaming com arquitetura de alto desempenho oferece suporte à ingestão de dados em tabelas Apache Iceberg gerenciadas pelo Snowflake, incluindo ambas as tabelas Iceberg v2 e Iceberg v3. Isso permite o streaming de dados quase em tempo real para tabelas Iceberg com todos os benefícios de desempenho da arquitetura de alto desempenho.

Nota

A arquitetura clássica é compatível apenas com as tabelas Iceberg v2. Se você precisa de suporte para o Iceberg v3, deve usar a arquitetura de alto desempenho. Para obter mais informações sobre o suporte ao Iceberg na arquitetura clássica, consulte Snowpipe Streaming Classic com tabelas Apache Iceberg™.

Como funciona

O Snowpipe Streaming ingere os dados por meio do objeto PIPE em sua tabela Iceberg de destino. O Snowflake cria arquivos de dados do Apache Parquet compatíveis com o Iceberg usando os metadados correspondentes do Iceberg e os carrega no local de armazenamento em nuvem externo configurado. Os dados são disponibilizados como uma tabela Iceberg gerenciada pelo Snowflake e registrados no Snowflake como o catálogo Iceberg.

O Snowflake se conecta ao seu local de armazenamento usando um volume externo.

Introdução

Esta seção apresenta um exemplo passo a passo de como configurar o Snowpipe Streaming com a arquitetura de alto desempenho para ingerir dados em uma tabela Iceberg.

Etapa 1: Criação de um volume externo

Crie um volume externo que especifique um local de armazenamento para os dados da tabela Iceberg.

Conceda a função de streaming USAGE no volume externo:

GRANT USAGE ON EXTERNAL VOLUME my_external_volume TO ROLE my_streaming_role;

Etapa 2: Criação de uma tabela Iceberg gerenciada pelo Snowflake

Crie uma tabela Iceberg gerenciada pelo Snowflake com seu volume externo configurado:

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
    event_id NUMBER,
    event_type STRING,
    event_data VARIANT,
    event_timestamp TIMESTAMP_NTZ
)
    CATALOG = 'SNOWFLAKE'
    EXTERNAL_VOLUME = 'my_external_volume'
    BASE_LOCATION = 'my_iceberg_table/'
    ICEBERG_VERSION = 3;

Nota

Se você omitir o parâmetro ICEBERG_VERSION, a tabela assumirá como padrão o Iceberg v2.

Etapa 3: Criação de um canal para ingestão

Crie um canal que tenha como destino a tabela Iceberg. Você pode usar o canal padrão (criado automaticamente) ou criar um canal personalizado:

-- Option 1: Use the default pipe.
-- The default pipe is automatically created when you open a channel
-- against the table using the SDK. The default pipe name follows the
-- convention: <TABLE_NAME>-STREAMING (for example, MY_ICEBERG_TABLE-STREAMING).

-- Option 2: Create a custom pipe with explicit column mapping.
CREATE OR REPLACE PIPE my_iceberg_pipe AS
    COPY INTO my_iceberg_table (event_id, event_type, event_data, event_timestamp)
    FROM (SELECT $1:event_id, $1:event_type, $1:event_data, $1:event_timestamp);

Etapa 4: Transmissão de dados usando o SDK

Configure o SDK para transmitir os dados para sua tabela Iceberg pelo canal. Use a mesma configuração de SDK, conforme descrito em:doc:snowpipe-streaming-high-performance-getting-started, especificando o canal da tabela Iceberg na configuração do cliente.

Versões do Iceberg compatíveis

A arquitetura de alto desempenho é compatível com as tabelas Iceberg v2 e Iceberg v3.

A arquitetura clássica é compatível apenas com as tabelas Iceberg v2.

Tipos de dados suportados

O Snowflake Ingest SDK é compatível com a maioria dos tipos de dados do Iceberg que o Snowflake atualmente. Para obter mais informações, consulte Tipos de dados para tabelas Apache Iceberg™.

O SDK também é compatível com os três tipos de dados estruturados: ARRAY, OBJECT e MAP estruturados.

Notas de uso

Limitações

As seguintes limitações se aplicam ao Snowpipe Streaming com arquitetura de alto desempenho e tabelas Iceberg:

  • Não há suporte para tabelas Iceberg particionadas.

  • A evolução de esquema não é compatível com as tabelas Iceberg.

  • Colunas VARCHAR com restrição de tamanho (por exemplo, VARCHAR(100)) não são compatíveis com tabelas Iceberg. Use STRING ou VARCHAR sem restrição de tamanho.

As limitações da arquitetura de alto desempenho do Snowpipe Streaming e as limitações das tabelas Iceberg também se aplicam.