Snowpipe Streamingのベストプラクティス

コスト最適化

ベストプラクティスとして、1秒あたりにより多くのデータを書き込む少数のクライアントで API を呼び出すことをお勧めします。JavaまたはScalaアプリケーションを使用する IoT デバイスやセンサーなどの複数のソースからデータを集計してから API を呼び出し、Snowflake Ingest SDK を使用してより高いフローレートでデータをロードします。API は、アカウント内の複数のターゲットテーブルにまたがるデータを効率的に集計します。

バッチとストリーミングの両方のインジェスチョンに同じテーブルを活用すると、ファイル移行が操作済みであるため、Snowpipe Streamingのコンピューティングコストを削減することもできます。

パフォーマンスの推奨事項

高スループットのデプロイで最適なパフォーマンスを得るには、次のアクションをお勧めします。

  • TIME、DATE、およびすべての TIMESTAMP 列の値を、 java.time パッケージから サポートされている型 の1つとして渡す。

  • OpenChannelRequest.builder を使用してチャネルを作成する場合、 OnErrorOptionOnErrorOption.CONTINUE に設定し、 insertRows からの戻り値で潜在的なインジェスチョンエラーがないか手動で確認する。現在、このアプローチは OnErrorOption.ABORT が使用されたときにスローされる例外に依存するよりも優れたパフォーマンスをもたらします。

  • 複数の行をロードする場合、 insertRows を使用すると、ロックに費やされる時間が少ないため、 insertRow を複数回呼び出すよりもパフォーマンスと費用対効果が高くなります。

  • デフォルトのログレベルを DEBUG に設定する場合は、以下のロガーが INFO でログし続けることを確認してください。これは、 DEBUG の出力が非常に詳細で、パフォーマンスを著しく低下させる可能性があるからです。

    • net.snowflake.ingest.internal.apache.parquet

    • org.apache.parquet