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 オブジェクト

デフォルトパイプ

Snowpipe Streamingのセットアッププロセスを簡素化するために、Snowflakeはすべてのターゲットテーブルのデフォルトパイプを提供します。これにより、 CREATEPIPEDDL ステートメントを手動で実行することなく、すぐにデータのストリーミングを開始できます。

デフォルトのパイプはどのテーブルでも暗黙的に使用でき、簡素化された完全に管理されたエクスペリエンスを提供します。

  • オンデマンド作成:デフォルトのパイプは、ターゲットテーブルに対して最初にパイプ情報またはオープンチャネル呼び出しが成功した後にのみオンデマンドで作成されます。お客様は、これらの呼び出しのいずれかによってパイプがインスタンス化された後にのみ、パイプを表示または説明することができます(SHOWPIPES または DESCRIBEPIPE を使用)

  • 命名規則:デフォルトのパイプは、特定の予測可能な命名規則に従います。

    • 形式: <TABLE_NAME>-STREAMING

    • 例:ターゲットテーブルの名前が MY_TABLE の場合、デフォルトのパイプの名前は MY_TABLE-STREAMING です。

  • Snowflakeの包括的な管理:このデフォルトのパイプは、Snowflakeによって包括的に管理されます。お客様は、デフォルトのパイプに対して CREATE、 ALTER または DROP などの変更を行うことはできません。

  • 可視性:自動的に管理されているにもかかわらず、お客様は通常のパイプと同じようにデフォルトのパイプを検査できます。お客様は SHOWPIPESDESCRIBEPIPESHOWCHANNELS コマンドを使用して表示することができ、アカウント使用状況のメタデータビュー、 ACCOUNT_USAGE.PIPESACCOUNT_USAGE.METERING_HISTORY または ORGANIZATION_USAGE.PIPES にも含まれます。

デフォルトのパイプは簡単にするために設計されており、特定の制限があります。

  • 変換なし:デフォルトのパイプの内部メカニズムは、基になるコピーステートメントで MATCH_BY_COLUMN_NAME を使用します。特定のデータ変換はサポートしていません。

  • 事前クラスタリングなし:デフォルトのパイプは、ターゲットテーブルの事前クラスタリングをサポートしていません。

ストリーミングワークフローに特定の変換(キャスト、フィルタリング、複雑なロジックなど)が必要な場合や、事前クラスタリングを利用する必要がある場合は、独自の名前付きパイプを手動で作成する必要があります。詳細については、 CREATE PIPE をご参照ください。

Snowpipe Streaming SDK または RESTAPIを構成するとき、クライアント構成でデフォルトのパイプ名を参照して、ストリーミングを開始できます。詳細については、 チュートリアル:Snowpipeストリーミング・ハイパフォーマンス・アーキテクチャ SDK の使用を始める および Snowpipe Streaming RESTAPI の利用開始:cURL および JWT のチュートリアル をご参照ください。

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

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

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

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

重要

When you use the pre-clustering feature, ensure that you don't disable the auto-clustering feature on the destination table. Disabling auto-clustering can lead to degraded query performance over time.

スキーマ進化のサポート

Snowpipe Streamingは、テーブルスキーマの自動進化をサポートしています。この機能により、データパイプラインは変化するデータ構造にシームレスに適応することができます。有効にすると、Snowflakeは受信ストリームで検出された新しい列を追加し、 NOT NULL 制約をドロップすることで、宛先テーブルを自動的に拡張でき、新しいデータパターンに対応できます。詳細については、 テーブルスキーマの進化 をご参照ください。

制限事項

  • ネイティブテーブルのみ:スキーマの進化は、標準的なSnowflakeテーブルでのみサポートされています。外部テーブルとIcebergテーブルはサポートされていません。

  • 列の拡張なし:既存の列の精度、スケール、長さを自動的に増やすことはできません。

  • 構造化された型のサポートなし:スキーマの進化は構造化されたデータ型ではサポートされていません。たとえば、構造化された OBJECT または ARRAY 列など。ただし、構造化された型を含む新しい列は、 VARIANT として推測されます。これにより、 JSON オブジェクトと配列のサポートが有効になります。

Snowpipe Streaming Classicとの違い

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

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

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

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

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

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