|iceberg-tm|テーブルによるSnowpipe Streaming高性能アーキテクチャ

高性能アーキテクチャのSnowpipe Streamingは、Iceberg v2および:doc:`Iceberg v3 </user-guide/tables-iceberg-v3-specification-support>`テーブルの両方を含む、Snowflake管理の:doc:`Apache Iceberg </user-guide/tables-iceberg>`テーブルへのデータのインジェストをサポートします。これにより、高性能アーキテクチャのすべてのパフォーマンス上の利点を備えつつ、Icebergテーブルへのほぼリアルタイムのデータのストリーミングが可能になります。

注釈

クラシックアーキテクチャはIceberg v2テーブルのみをサポートします。Iceberg v3のサポートが必要な場合は、高性能アーキテクチャを使用する必要があります。クラシックアーキテクチャにおけるIcebergのサポートについて詳しくは、:doc:`snowpipe-streaming-classic-iceberg`を参照してください。

仕組み

Snowpipe Streamingは、PIPEオブジェクトを通じてターゲットのIcebergテーブルにデータをインジェストします。Snowflakeは、対応するIcebergメタデータとともにIceberg互換のApache Parquetデータファイルを作成し、構成済みの外部クラウドストレージの場所にアップロードします。データは、IcebergカタログとしてSnowflakeに登録されたSnowflake管理のIcebergテーブルとして利用できるようになります。

Snowflakeは 外部ボリューム を使用してストレージの場所に接続します。

始めましょう

このセクションでは、Icebergテーブルにデータをインジェストするために、高性能アーキテクチャのSnowpipe Streamingを設定する方法のステップバイステップの例を示します。

ステップ1:外部ボリュームを作成する

Icebergテーブルデータのストレージの場所を指定する:doc:`外部ボリューム</user-guide/tables-iceberg-configure-external-volume>`を作成します。

外部ボリュームに対してストリーミングロールUSAGEを付与します。

GRANT USAGE ON EXTERNAL VOLUME my_external_volume TO ROLE my_streaming_role;

ステップ2:Snowflake管理のIcebergテーブルを作成する

構成済みの外部ボリュームを使用して、:doc:`Snowflake管理のIcebergテーブル</sql-reference/sql/create-iceberg-table-snowflake>`を作成します。

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;

注釈

``ICEBERG_VERSION``パラメーターを省略した場合、テーブルのデフォルトはIceberg v2になります。

ステップ3:インジェスチョン用のパイプの作成

Icebergテーブルをターゲットとするパイプを作成します。デフォルトのパイプ(自動的に作成)を使用するか、カスタムパイプを作成できます。

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

ステップ4:SDKを使用してデータをストリーミングする

SDKを構成し、パイプを介してIcebergテーブルにデータをストリーミングします。:doc:`snowpipe-streaming-high-performance-getting-started`で説明されているのと同じSDKのセットアップを使用し、クライアント構成でIcebergテーブルのパイプを指定します。

サポートされているIcebergバージョン

高性能アーキテクチャは、Iceberg v2および:doc:`Iceberg v3 </user-guide/tables-iceberg-v3-specification-support>`両方のテーブルをサポートしています。

:doc:`クラシックアーキテクチャ<snowpipe-streaming-classic-iceberg>`はIceberg v2テーブルのみをサポートしています。

サポートされているデータ型

Snowflake Ingest SDKは、現在SnowflakeがサポートしているIcebergデータ型のほとんどをサポートしています。詳細については、 Apache Iceberg™ テーブルのデータ型 をご参照ください。

SDKは、3つの:doc:`構造化データ型</sql-reference/data-types-structured>`へのインジェスチョンもサポートしています。構造化ARRAY、構造化OBJECT、および構造化MAPです。

使用上の注意

  • Snowpipe Streamingは、**IcebergカタログとしてSnowflake**のみをサポートします。外部カタログ(AWS GlueやHive Metastoreなど)を使用する外部管理Icebergテーブルはサポートされていません。ただし、:doc:`Snowflake管理のIcebergテーブルをSnowflake Open Catalogと同期する</user-guide/tables-iceberg-open-catalog-sync>`ことは可能です。

  • Snowflakeは 外部ボリューム を使用してストレージの場所に接続します。Icebergテーブルの データストレージ はお客様の責任となります。

  • Iceberg互換のParquetファイルは、Icebergテーブルで指定された:ref:`STORAGE_SERIALIZATION_POLICY <label-storage_serialization_policy>`に基づいて作成されます。

制限事項

高性能アーキテクチャおよびIcebergテーブルを使用したSnowpipe Streamingには、次の制限が適用されます。

  • パーティション化されたIcebergテーブルはサポートされていません。

  • スキーマの進化はIcebergテーブルではサポートされていません。

  • 長さに制約のあるVARCHAR列(たとえば、VARCHAR(100))は、Icebergテーブルではサポートされていません。長さの制約なしでSTRINGまたはVARCHARを使用してください。

:ref:`Snowpipe Streaming高性能アーキテクチャの制限<label-snowpipe_streaming_high_performance_limitations>`および:ref:`Icebergテーブルの制限<label-tables_iceberg_considerations>`も適用されます。