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

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

クラシック建築に関する情報は、 Snowpipe ストリーミング - クラシックアーキテクチャ をご参照ください。クラシック SDK とハイパフォーマンス SDK の違いについては、 クラシック SDK とハイパフォーマンス SDK の比較 をご参照ください。

主要な機能

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

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

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

  • 請求:

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

    • Java SDK:新しい snowpipe-streaming SDK を使用し、Rust ベースのクライアントコアにより、クライアントサイドのパフォーマンス向上とリソース使用量の削減を実現しています。

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

  • データ処理の最適化:

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

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

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

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

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

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

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

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

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

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

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

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

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

  • スキーマ管理:入力されるストリームデータのスキーマとターゲットテーブル列へのマッピングを定義し、サーバーサイドでのスキーマ検証を可能にします。

Snowpipe Streaming Classicとの違い

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

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

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

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

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

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

制限と考慮事項

  • Snowpipe ON_ERROR オプション: STREAMING Snowpipe ON_ERROR オプションは CONTINUE にのみ対応しています。

  • 対応アーキテクチャ(Rust Core):Arm64 Mac、ウィンドウズ、Arm64-Linux、X86_64-Linux。

  • Linuxの要件:Linuxで SDK、システムにglibcライブラリのバージョン2.18以上がインストールされている必要があります。

  • デプロイ環境: AWS のデプロイメントのみがサポートされています。

  • Private Link: PrivateLink はサポートされていません。

  • クラスタリング・テーブル(インジェスト):クラスタリングテーブル(インジェスト):クラスタリングテーブルをターゲット・テーブルとすることはできますが、インジェスト処理中にクラスタリングは行われません。

  • 複製:複製はサポートされていません。

  • ALTER PIPE SET PIPE_EXECUTION_PAUSED = true: openChannelは一時停止すると失敗しますが、インジェストはすぐには停止しないかもしれません。

  • 認証ロール:既定のロールが認証に使用されます。将来的には、他のロールを指定できるようにする予定です。

  • タイムゾーン: SDK は自動的に UTC を使用します。ユーザーはこの設定を変更することはできません。

  • 空のペイロードの制限: SDK と REST API は、空のペイロードを含む行セットの提出をサポートしていません。インジェスチョンに成功するためには、少なくとも1つのデータ行が含まれている必要があります。

  • エラーメッセージの表示:エラーメッセージはチャンネルステータスのレスポンスでは利用可能ですが、新しいチャンネル履歴表示では表示されません。