概要
Snowflake のSYSTEM$SET_RETURN_VALUEについて、ちょっとした検証結果を共有します。
SYSTEM$SET_RETURN_VALUEは、タスクの戻り値を設定するためのシステム関数です。設定した値はタスク履歴(TASK_HISTORY)のRETURN_VALUE列で確認できるほか、後続タスクからSYSTEM$GET_PREDECESSOR_RETURN_VALUEで参照できます。
本記事では、次の 2 つのケースで、最終的にどの値が戻り値として残るのかを確認しました。
- 1 つのタスク内で
SYSTEM$SET_RETURN_VALUEを複数回呼び出した場合 -
SYSTEM$SET_RETURN_VALUEを呼び出した後、処理の途中でエラーとなった場合
検証の結果、1 では最後に設定した値が、2 ではエラー発生前に最後に設定した値が戻り値として表示されました。処理の進捗に合わせて戻り値を更新しておけば、タスクが失敗した際にどのステップまで進んでいたかを把握する用途にも使えそうです。
事前準備
データベースとスキーマを作成
CREATE OR REPLACE DATABASE TASK_TEST_DB;
CREATE OR REPLACE SCHEMA TASK_TEST_DB.TEST_SCHEMA;
USE DATABASE TASK_TEST_DB;
USE SCHEMA TEST_SCHEMA;
検証
SET_RETURN_VALUEを複数回指定した場合
SYSTEM$SET_RETURN_VALUEを 3 回呼び出すタスクを作成します。
CREATE OR REPLACE TASK TASK_RETURN_SUCCESS
WAREHOUSE = COMPUTE_WH
AS
BEGIN
CALL SYSTEM$SET_RETURN_VALUE('STEP_1');
SELECT 1;
CALL SYSTEM$SET_RETURN_VALUE('STEP_2');
SELECT 2;
CALL SYSTEM$SET_RETURN_VALUE('SUCCESS');
END;
後続タスクを作成します。
CREATE OR REPLACE TASK TASK_RETURN_SUCCESS_AFTER
WAREHOUSE = COMPUTE_WH
AFTER TASK_RETURN_SUCCESS
AS
BEGIN
SELECT 1;
END;
タスクを実行します。
EXECUTE TASK TASK_RETURN_SUCCESS;
最後に設定した値であるSUCCESSが表示されました。
途中でエラーとなった場合
STEP_2を設定した後に、ゼロ除算で意図的にエラーを発生させるタスクを作成します。
CREATE OR REPLACE TASK TASK_RETURN_ERROR
WAREHOUSE = COMPUTE_WH
AS
BEGIN
CALL SYSTEM$SET_RETURN_VALUE('STEP_1');
SELECT 1;
CALL SYSTEM$SET_RETURN_VALUE('STEP_2');
-- 意図的にエラー
SELECT 1 / 0;
-- ここには到達しない
CALL SYSTEM$SET_RETURN_VALUE('SUCCESS');
END;
後続タスクを作成します。
CREATE OR REPLACE TASK TASK_RETURN_ERROR_AFTER
WAREHOUSE = COMPUTE_WH
AFTER TASK_RETURN_ERROR
AS
BEGIN
SELECT 1;
END;
タスクを実行します。
EXECUTE TASK TASK_RETURN_ERROR;
エラー発生前に設定した値であるSTEP_2が表示されました。







