Architecture hautes performances de Snowpipe Streaming avec les tables Apache Iceberg™

Snowpipe Streaming avec une architecture hautes performances prend en charge l’ingestion de données dans des tables :doc:` Apache Iceberg </user-guide/tables-iceberg>` gérées par Snowflake, y compris Iceberg v2 et Iceberg v3. Cela permet un flux de données en quasi temps réel dans les tables Iceberg avec tous les avantages de l’architecture hautes performances.

Note

L’architecture classique ne prend en charge que les tables Iceberg v2. Si vous avez besoin de la prise en charge d’Iceberg v3, vous devez utiliser l’architecture hautes performances. Pour plus d’informations sur la prise en charge d’Iceberg dans l’architecture classique, voir Snowpipe Streaming Classic avec tables Apache Iceberg™.

Fonctionnement

Snowpipe Streaming ingère des données via l’objet PIPE dans votre table Iceberg cible. Snowflake crée des fichiers de données Apache Parquet compatibles avec Iceberg avec les métadonnées Iceberg correspondantes et les charge dans votre emplacement de stockage Cloud externe configuré. Les données sont mises à disposition sous forme de table Iceberg gérée par Snowflake et enregistrée avec Snowflake comme catalogue Iceberg.

Snowflake se connecte à votre emplacement de stockage via un volume externe.

Prise en main

Cette section fournit un exemple étape par étape de la façon de configurer Snowpipe Streaming avec une architecture hautes performances pour ingérer des données dans une table Iceberg.

Étape 1 : Créer un volume externe

Créez un volume externe qui spécifie un emplacement de stockage pour vos données de table Iceberg.

Accordez le rôle de flux USAGE sur le volume externe :

GRANT USAGE ON EXTERNAL VOLUME my_external_volume TO ROLE my_streaming_role;

Étape 2 : Créer une table Iceberg gérée par Snowflake

Créez une table Iceberg gérée par Snowflake avec votre volume externe configuré :

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;

Note

Si vous omettez le paramètre ICEBERG_VERSION, la table par défaut est Iceberg v2.

Étape 3 : Créer un canal pour l’ingestion

Créez un canal qui cible la table Iceberg. Vous pouvez utiliser le canal par défaut (créé automatiquement) ou créer un canal personnalisé :

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

Étape 4 : Diffuser des données de flux à l’aide du SDK

Configurez le SDK pour diffuser des données dans votre table Iceberg via le canal. Utilisez la même configuration SDK que celle décrite dans:doc:snowpipe-streaming-high-performance-getting-started, en spécifiant le canal de votre table Iceberg dans la configuration du client.

Versions Iceberg prises en charge

L’architecture hautes performances prend en charge les tables Iceberg v2 et Iceberg v3.

L’architecture classique prend en charge uniquement les tables Iceberg v2.

Types de données pris en charge

Le SDK Snowflake Ingest prend en charge la plupart des mêmes types de données Iceberg que ceux actuellement pris en charge par Snowflake. Pour plus d’informations, voir Types de données des tables Apache Iceberg™.

Le SDK prend également en charge l’ingestion dans les trois:doc:types de données structurés </sql-reference/data-types-structured> : ARRAY structuré, OBJECT structuré et MAP structuré.

Notes sur l’utilisation

  • Snowpipe Streaming ne prend en charge que Snowflake en tant que catalogue Iceberg. Les tables Iceberg gérées en externe qui utilisent des catalogues externes (commeAWS Glue ou Hive Metastore) ne sont pas prises en charge. Toutefois, vous pouvez :doc:` synchroniser vos tables Iceberg gérées par Snowflake avec Snowflake Open Catalog </user-guide/tables-iceberg-open-catalog-sync>`.

  • Snowflake se connecte à votre emplacement de stockage via un volume externe. Vous êtes responsable du stockage de données pour les tables Iceberg.

  • Les fichiers Parquet compatibles avec Iceberg sont créés sur la base du site STORAGE_SERIALIZATION_POLICY spécifié dans la table Iceberg.

Limitations

Les limitations suivantes s’appliquent à Snowpipe Streaming avec une architecture hautes performances et des tables Iceberg :

  • Les tables Iceberg partitionnées ne sont pas prises en charge.

  • L’évolution du schéma n’est pas prise en charge pour les tables Iceberg.

  • Les colonnes VARCHAR avec contrainte de longueur (par exemple,``VARCHAR(100)``) ne sont pas prises en charge pour les tables Iceberg. Utilisez STRING ouVARCHAR sans contrainte de longueur.

Les limitations de l’architecture hautes performances de Snowpipe Streaming et les limitations des tables Iceberg s’appliquent également.