- カテゴリ:
システム関数 (システム情報)
SYSTEM$SET_RETURN_VALUE¶
タスクの戻り値を明示的に設定します。
タスクグラフ では、タスクはこの関数を呼び出して戻り値を設定できます。このタスクを先行タスクとして識別する別のタスク(タスク定義で AFTER
キーワードを使用)は、 SYSTEM$GET_PREDECESSOR_RETURN_VALUE を使用して、先行タスクにより設定された戻り値を取得できます。
構文¶
SYSTEM$SET_RETURN_VALUE( '<string_expression>' )
string_expression
引数の値は文字列リテラルにすることも、変数にすることもできます。例えば、 SYSTEM$SET_RETURN_VALUE(:VARIABLE)
。
引数¶
string_expression
戻り値として設定する文字列。文字列のサイズは10 kB以下にする必要があります(UTF8 でエンコードされている場合)。
例¶
戻り値を設定するタスクを作成します。先行タスクの完了後に実行される2番目の子タスクを作成します。子タスクは、先行タスクによって設定された戻り値を取得し( SYSTEM$GET_PREDECESSOR_RETURN_VALUE を呼び出すことにより)、テーブル行に挿入します。
-- Create a table to store the return values. CREATE OR REPLACE TABLE return_values (str VARCHAR); -- Create a task that sets the return value for the task. CREATE TASK set_return_value WAREHOUSE=return_task_wh SCHEDULE='1 MINUTE' AS CALL SYSTEM$SET_RETURN_VALUE('The quick brown fox jumps over the lazy dog'); -- Create a task that identifies the first task as the predecessor task and retrieves the return value set for that task. CREATE TASK get_return_value WAREHOUSE=return_task_wh AFTER set_return_value AS INSERT INTO return_values VALUES(SYSTEM$GET_PREDECESSOR_RETURN_VALUE()); -- Note that if there are multiple predecessor tasks that are enabled, you must specify the name of the task to retrieve the return value for that task. CREATE TASK get_return_value_by_pred WAREHOUSE=return_task_wh AFTER set_return_value AS INSERT INTO return_values VALUES(SYSTEM$GET_PREDECESSOR_RETURN_VALUE('SET_RETURN_VALUE')); -- Resume task (using ALTER TASK ... RESUME). -- Wait for task to run on schedule. SELECT DISTINCT(str) FROM return_values; +-----------------------------------------------+ | STR | +-----------------------------------------------+ | The quick brown fox jumps over the lazy dog | +-----------------------------------------------+ SELECT DISTINCT(RETURN_VALUE) FROM TABLE(information_schema.task_history()) WHERE RETURN_VALUE IS NOT NULL; +-----------------------------------------------+ | RETURN_VALUE | +-----------------------------------------------+ | The quick brown fox jumps over the lazy dog | +-----------------------------------------------+
例2: 別のストアドプロシージャを使った呼び出し¶
最初の例に似ていますが、タスクの戻り値を設定し、個別のストアドプロシージャを呼び出して取得します。
-- Create a table to store the return values.
CREATE OR REPLACE TABLE return_values_sp (str VARCHAR);
-- Create a stored procedure that sets the return value for the task.
CREATE OR REPLACE PROCEDURE set_return_value_sp()
RETURNS STRING
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS $$
var stmt = snowflake.createStatement({sqlText:`CALL SYSTEM$SET_RETURN_VALUE('The quick brown fox jumps over the lazy dog');`});
var res = stmt.execute();
$$;
-- Create a stored procedure that inserts the return value for the predecessor task into the 'return_values_sp' table.
CREATE OR REPLACE PROCEDURE get_return_value_sp()
RETURNS STRING
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS $$
var stmt = snowflake.createStatement({sqlText:`INSERT INTO return_values_sp VALUES(SYSTEM$GET_PREDECESSOR_RETURN_VALUE());`});
var res = stmt.execute();
$$;
-- Create a task that calls the set_return_value stored procedure.
CREATE TASK set_return_value_t
WAREHOUSE=warehouse1
SCHEDULE='1 MINUTE'
AS
CALL set_return_value_sp();
-- Create a task that calls the get_return_value stored procedure.
CREATE TASK get_return_value_t
WAREHOUSE=warehouse1
AFTER set_return_value_t
AS
CALL get_return_value_sp();
-- Resume task.
-- Wait for task to run on schedule.
SELECT DISTINCT(str) FROM return_values_sp;
+-----------------------------------------------+
| STR |
+-----------------------------------------------+
| The quick brown fox jumps over the lazy dog |
+-----------------------------------------------+
SELECT DISTINCT(RETURN_VALUE)
FROM TABLE(information_schema.task_history())
WHERE RETURN_VALUE IS NOT NULL;
+-----------------------------------------------+
| RETURN_VALUE |
+-----------------------------------------------+
| The quick brown fox jumps over the lazy dog |
+-----------------------------------------------+
例3: 変数を使って戻り値を設定する¶
次の例は、タスクの実行に基づいて戻り値を動的に生成し、変数を使って戻り値を設定する方法を示しています。この例では、タスクはストリームからランディングテーブルにデータをロードし、ロードされた行数を示す戻り値を設定します。
CREATE OR REPLACE TASK load_raw_data
WAREHOUSE = 'WH'
WHEN
SYSTEM$STREAM_HAS_DATA('NEW_WEATHER_DATA')
AS
DECLARE
rows_loaded NUMBER;
result_string VARCHAR;
BEGIN
INSERT INTO raw_weather_data ( -- our landing table
row_id)
SELECT
row_id
FROM
new_weather_data -- our source stream
;
-- to see the number of rows loaded in the UI
rows_loaded := (SELECT $1 FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())));
result_string := :rows_loaded || ' rows loaded into RAW_WEATHER_DATA';
-- show result string as task return value
CALL SYSTEM$SET_RETURN_VALUE(:result_string);
END;