Snowflake Cortex AI関数:複数行のエラー処理の改善(プレビュー)¶
この動作変更バンドルが有効になっている場合、ほとんどの:doc:`Snowflake Cortex AI関数</user-guide/snowflake-cortex/aisql>`はエラー発生時にエラーを発生させるのではなく、NULLを返します。これにより、一部の行にエラーが発生しても、複数行のクエリを完了できます。さらに、:doc:`AI_PARSE_DOCUMENT</sql-reference/functions/ai_parse_document>`関数は、他のAI関数のエラー処理との一貫性を高めるために戻り値を変更します。
変更前 |
大半のAI関数は、関数が成功しないとエラーを発生させるため、1行を処理できない場合でも複数行のクエリは完了しません。 |
|---|---|
変更後 |
大半のAI関数は関数が失敗した場合にNULLを返すため、一部の行を処理できない場合でも複数行のクエリを完了できます。エラーのある行は、複数行の結果から簡単に除外できます。 影響を受けるAI関数に新しく追加されたオプションの最終パラメーター``return_error_details``が存在し、TRUEに設定されている場合、関数は以前の結果タイプではなく、``value``と``error``のフィールドを持つ:ref:`OBJECT<label-data_type_object>`を返します。関数が成功した場合、``error``フィールドはNULLになり、``value``フィールドには実際の戻り値が含まれます。関数が失敗した場合、``value``フィールドはNULLになり、``error``フィールドにはエラーメッセージが含まれます。この動作により、エラーのある行を複数行の結果から簡単に除外できるだけでなく、後で確認できるようにエラーを記録することもできます。 さらに、他のAI関数との整合性を高めるため、:doc:`AI_PARSE_DOCUMENT</sql-reference/functions/ai_parse_document>`関数の戻り値に若干の変更が加えられています。変更点は以下のとおりです。
|
影響を受けるAI関数¶
次のAI関数は、この動作変更の影響を受けます。
AI_COMPLETE:指定された大規模言語モデル(LLM)を使用して、テキストまたは画像プロンプトからテキスト応答を生成します。
AI_CLASSIFY:テキストまたは画像をユーザー定義のカテゴリに分類します。
AI_FILTER:自然言語で表現されたテキストと画像にセマンティックフィルターを適用します。
AI_PARSE_DOCUMENT:ドキュメント構造、テキスト、画像、テーブルをMarkdownとして抽出します。
AI_TRANSCRIBE:音声またはビデオファイルを、話者IDとタイムスタンプ付きで文字に変換します。
AI_TRANSLATE:サポートされている言語間でテキストを翻訳します。
AI_SENTIMENT:テキストコンテンツに対して感情分類を実行します。
AI_COUNT_TOKENS:プロンプトのトークン使用量を推定します。
影響を受けないAI関数¶
次のAI関数は、この動作変更の影響を*受けません*。
AI_EXTRACT:この関数は、結果の個別のフィールドとしてエラー情報を返すことによって既にエラーを処理しており、単一のエラーが原因で複数行のクエリを失敗させることはありません。AI_EXTRACTの動作は``return_error_details``がTRUEの場合の他のAI関数の新しい動作に似ていますが、関数は``return_error_details``を受け入れません。
AI_AGG:集計関数はこのBCRのスコープ内にありません。Snowflakeは、集計時にエラーが発生する行をどのように処理すべきかを検討中です。これらの関数の動作は将来のBCRで変更される可能性があります。
AI_EMBED:この関数はVECTORを返しますが、VARIANTオブジェクトでは現在サポートされていません。この関数の動作は将来のBCRで変更される可能性があります。
SNOWFLAKE.CORTEX名前空間にある古いAI関数。Snowflakeはこれらの関数の動作を変更する予定はありません。
ヘルパー関数¶
このBCRには、:code:`return_error_details`がTRUEに設定されている場合に返されるエラー詳細オブジェクトから情報を抽出するのに役立つ2つのヘルパー関数が含まれていますこれらの関数は、:code:`return_error_details`がTRUEに設定されている場合に、代替のエラー処理動作に簡単にアクセスできるようにします。
例¶
次の例は、新しいエラー処理動作を示しています。これらの例では、AI_TRANSLATEを使用していますが、動作は影響を受けるすべての関数で同じです。
エラーの有無による新しい動作¶
最初のコード例は、関数が成功した場合の出力を示し、2番目の例は、無効な言語コードのために関数が失敗した場合の出力を示しています。
-- succeeds
SELECT AI_TRANSLATE(spanish_comment, 'es', 'en') as english_comment, "Este es un commentario" as spanish_comment;
結果:
+-------------------+------------------+
| ENGLISH_COMMENT | SPANISH_COMMENT |
|-------------------+------------------|
| This is a comment | Este es un |
| | comentario |
+-------------------+------------------+
-- fails
SELECT AI_TRANSLATE(spanish_comment, 'es', 'xx') as english_comment, "Este es un commentario" as spanish_comment;
結果
+-------------------+------------------+
| ENGLISH_COMMENT | SPANISH_COMMENT |
|-------------------+------------------|
| NULL | Este es un |
| | comentario |
+-------------------+------------------+
エラーの詳細に関する新しい動作¶
前回と同様、最初のコードサンプルは成功ケースで、2番目はエラーケースです。
-- succeeds
SELECT AI_TRANSLATE(spanish_comment, 'es', 'en', TRUE) as result, "Este es un commentario" as spanish_comment;
Result:
+--------------------------------+------------------+
| RESULT | SPANISH_COMMENT |
|--------------------------------|------------------|
| { | Este es un |
| "value": "This is a comment",| comentario |
| "error": NULL | |
| } | |
+--------------------------------+------------------+
-- fails
SELECT AI_TRANSLATE(spanish_comment, 'es', 'xx', TRUE) as result, "Este es un commentario" as spanish_comment;
結果:
+--------------------------------+------------------+
| RESULT | SPANISH_COMMENT |
|--------------------------------|------------------|
| { | Este es un |
| "value": NULL, | comentario |
| "error": "Invalid language | |
| \"xx\" | |
+--------------------------------+------------------+
複数行クエリ¶
次の例は、複数行のクエリで新しいエラー処理動作を使用する方法を示しています。行の処理中にエラーが発生した場合、その行は結果に含まれません。サンプルデータは、さまざまな言語のユーザーコメントを含むテーブルを想定しており、クエリはAI_TRANSLATEを使用してそれらすべてを英語に翻訳しようとします。
SELECT
AI_TRANSLATE(comment, comment_language, 'en') as translation_result,
comment_language,
comment
FROM comments
WHERE translation_result IS NOT NULL;
以下の例は、前の例と同じ結果を得るために:code:`return_error_details`パラメーターを使用する方法を示しています。
SELECT
AI_TRANSLATE(comment, comment_language, 'en', TRUE) as translation_result,
comment_language,
comment
FROM comments
WHERE translation_result:value IS NOT NULL;
参照:2184