Snowflakeが課す制約内でのハンドラーの設計

Snowflake環境内の安定性を確保するために、Snowflakeはハンドラーコードに次の制限を設けています。特に明記されていない限り、これらの制限は、ハンドラーが作成されたときではなく、実行されたときに適用されます。

このトピックの内容:

過度のメモリ消費を回避する

大量のメモリを消費する可能性がある次のことを避けます。

  • 大きなデータ値。これには、バイナリ値だけでなく、大きな配列、オブジェクト、またはバリアントが含まれます。

    Snowflakeは、ハンドラー言語で SQL データ型と対応する型の間で変換します。詳細については、 SQL とハンドラー言語間のデータ型マッピング をご参照ください。

  • 過度のスタック深度。Snowflakeでは、ネストされた50レベルの単純な関数呼び出しをエラーなしでテストしました。実際の上限は、スタックに配置される情報の量によって異なります。

ハンドラーコードが大量のメモリを消費すると、エラーが返されます。特定の制限は変更される場合があります。

呼び出しごとに長時間を要するアルゴリズムを回避する

ハンドラーの完了に時間がかかりすぎると、Snowflakeは SQL ステートメントを強制終了し、ユーザーにエラーを返します。これにより、無限ループなどのエラーの影響およびコストが制限されます。

セキュリティの脆弱性をもたらす可能性のあるライブラリを使用しない

ハンドラーは外部ライブラリの機能を使用できますが、Snowflakeのセキュリティ制限により、ファイルへの書き込みなど、一部の機能が無効になります。ライブラリの制限の詳細については、 UDFs とプロシージャのセキュリティプラクティス をご参照ください。