Snowpipe Streaming: 高性能アーキテクチャ

Snowpipeストリーミングのハイパフォーマンスアーキテクチャは、ほぼリアルタイムのインサイトを必要とするデータ集約型の最新組織向けに設計されています。この次世代アーキテクチャは、Snowflakeへのリアルタイムインジェストのスループット、効率性、柔軟性を大幅に向上させます。

従来のアーキテクチャについては、Snowpipe ストリーミング - クラシックアーキテクチャ をご参照ください。従来の SDK と高性能 SDK の違いについては、従来の SDK と高性能 SDK との比較 をご参照ください。

ソフトウェア要件

Java

Java 11以降が必要です。

Python

Pythonバージョン3.9以降が必要です。

主要な機能

  • スループットとレイテンシ:

    • 高いスループット:1テーブルあたり最大10 GB/sのインジェスト速度をサポートするように設計されています。

    • ほぼリアルタイムのインサイト:エンド・ツー・エンドのインジェストからクエリまでのレイテンシを5~10秒以内に実現。

  • 請求:

  • 柔軟なインジェスチョン:

    • Java SDK およびPython SDK:クライアント側のパフォーマンスを向上させ、リソースの使用量を削減するためのRustベースのクライアントコアを備えた、新しい :code:`snowpipe-streaming`SDKを利用しています。

    • REST API:直接的なインジェスチョンパスを提供し、軽量なワークロードの統合、IoT デバイスデータ、およびエッジのデプロイメントを簡素化します。

    注釈

    RESTAPI でSnowpipe Streaming SDK を始めて、パフォーマンスと使用開始のエクスペリエンスの向上を実感することをお勧めします。

  • データ処理の最適化:

    • インフライト変換: PIPE オブジェクト内の COPY コマンド構文を使用して、インジェスチョン中のデータクレンジングとリシェーピングをサポートします。

    • チャンネルの可視性の向上:主に、Snowsightの チャンネル履歴 の表示と、新しい GET_CHANNEL_STATUS API を通して、インジェストのステータスを把握できるようになりました。

このアーキテクチャは、以下のような場合にお勧めします。

  • 大容量ストリーミングワークロードの一貫したインジェスチョン。

  • 一刻を争う意思決定のためのリアルタイム分析とダッシュボードを提供します。

  • IoT デバイスやエッジデプロイメントからのデータの効率的な統合。

  • 透明性が高く、予測可能な、スループットベースの価格設定をストリーミング・インジェスチョンに求める企業。

新しいコンセプト PIPE オブジェクト

チャンネルやオフセットトークンなどのコアコンセプトをSnowpipe Streaming Classicから継承しつつ、このアーキテクチャでは中心的なコンポーネントとして PIPE オブジェクトを導入しています。

PIPE オブジェクトは、すべての取り込まれたストリーミングデータのエントリーポイントおよび定義レイヤーとして機能する名前付き Snowflake オブジェクトです。プロバイダーは以下の通り:

  • データ処理定義:変換やスキーママッピングのためのサーバー側のバッファリングなど、ターゲットテーブルにコミットされる前のストリーミングデータの処理方法を定義します。

  • 変換の有効化:COPY コマンド変換構文を組み込むことで、フライト中のデータ操作(例: フィルタリング、列の並べ替え、単純式)を可能にします。

  • テーブル機能のサポート:定義されたクラスタリングキー、DEFAULT 値列、および AUTOINCREMENT (または IDENTITY)列を使用して、テーブルへのインジェスチョンを処理します。

  • スキーマ管理:受信ストリーミングデータの予想されるスキーマと、ターゲットテーブル列へのマッピングの定義に役立ち、サーバー側のスキーマ検証を可能にします。

    高性能アーキテクチャのSnowpipe Streamingの PIPE オブジェクト

Default pipe

To simplify the setup process for Snowpipe Streaming, Snowflake provides a default pipe for every target table. This lets you start streaming data immediately without needing to manually execute CREATE PIPE DDL statements.

The default pipe is implicitly available for any table and offers a simplified, fully managed experience:

  • On-demand creation: The default pipe is created on demand only after the first successful pipe-info or open-channel call is made against the target table. Customers can only view or describe the pipe (using SHOW PIPES or DESCRIBE PIPE) after it has been instantiated by one of these calls.

  • Naming convention: The default pipe follows a specific, predictable naming convention:

    • Format: <TABLE_NAME>-STREAMING

    • Example: If your target table is named MY_TABLE, the default pipe is named MY_TABLE-STREAMING.

  • Fully Snowflake managed: This default pipe is fully managed by Snowflake. Customers can't perform any changes to it, such as CREATE, ALTER, or DROP the default pipe.

  • Visibility: Despite being automatically managed, customers can inspect the default pipe as they would a normal pipe. Customers can view it by using the SHOW PIPES, DESCRIBE PIPE, SHOW CHANNELS commands, and is also included in the Account Usage metadata views: ACCOUNT_USAGE.PIPES, ACCOUNT_USAGE.METERING_HISTORY, or ORGANIZATION_USAGE.PIPES.

The default pipe is designed for simplicity and has certain limitations:

  • No transformations: The internal mechanism for the default pipe uses MATCH_BY_COLUMN_NAME in the underlying copy statement. It doesn't support specific data transformations.

  • No pre-clustering: The default pipe doesn't support pre-clustering for the target table.

If your streaming workflow requires specific transformations --- for example, casting, filtering, or complex logic --- or you need to utilize pre-clustering, you must manually create your own named pipe. For more information, see CREATE PIPE.

When you configure the Snowpipe Streaming SDK or REST API, you can reference the default pipe name in your client configuration to begin streaming. For more information, see チュートリアル:Snowpipeストリーミング・ハイパフォーマンス・アーキテクチャ SDK の使用を始める and Snowpipe Streaming RESTAPI の利用開始:cURL および JWT のチュートリアル.

インジェスチョン中のデータの事前クラスタリング

Snowpipe Streamingは、インジェスチョン中にインフライトデータをクラスターできるため、ターゲットテーブルでのクエリパフォーマンスが向上します。この機能は、インジェスチョン中にデータがコミットされる前に直接ソートします。この方法でデータを並べ替えると、より高速なクエリのために組織が最適化されます。

事前クラスタリングを活用するには、ターゲットテーブルにクラスタリングキーが定義されている必要があります。この機能を有効にするには、Snowpipe Streamingパイプを作成または交換する際に、 COPYINTO ステートメント内のパラメーター CLUSTER_AT_INGEST_TIMETRUE に設定します。

詳細については、 :ref:`CLUSTER_AT_INGEST_TIME <label-copy_into_table_copyoptions> ` をご参照ください。この機能はハイ パフォーマンス アーキテクチャでのみ利用可能です。

重要

事前クラスタリング機能を使用する場合は、宛先テーブルで自動クラスタリング機能を無効にしていないことを確認してください。自動クラスタリングを無効にすると、時間の経過とともにクエリのパフォーマンスが低下する可能性があります。

Snowpipe Streaming Classicとの違い

クラシック・アーキテクチャに慣れ親しんだユーザーにとって、ハイパフォーマンス・アーキテクチャは以下のような変更をもたらします。

  • 新しい SDK と APIs: 新しい snowpipe-streaming SDK (Java SDK と REST API) が必要で、移行のためにクライアントコードの更新が必要です。

  • PIPE オブジェクトの要件: データのインジェスチョン、構成(変換など)、スキーマ定義はすべてサーバー側の PIPE オブジェクトで管理され、クラシックのクライアント主導の構成から移行します。

  • チャンネルの関連付け:クライアントアプリケーションは、ターゲットテーブルに対して直接ではなく、特定の PIPE オブジェクトに対してチャンネルタブを開きます。

  • スキーマ検証:主にクライアントサイド(Classic SDK)から、 PIPE オブジェクトに基づく Snowflake によるサーバーサイドの実施に移行。

  • 移行要件:新しい SDK 用にクライアントアプリケーションコードを修正し、Snowflake で PIPE オブジェクトを定義する必要があります。