❄️

【新機能】複数の先行TASKを指定する機能を試してみる

2022/09/15に公開

【新機能】複数の先行TASKを指定する機能を試してみる

はじめに

2022年8月にリリースされた内容に、複数の親 TASK を TASK 構築時に指定できるというものがありました。Snowflakeの公式ドキュメントの画像が分かりやすいのでのせちゃいます。

上の図ではTASK Dの親TASKはTASK BTASK Cになります。

(使用例)

リリースの概要

再度Snowflakeの公式ドキュメントから該当する修正内容を引っ張ってきました。

使用例を見るとTASK 4を作成するためには、afterの後ろの記述されている、a1, a2,a3という TASK の動作が完了した後というように指定されています。これまで TASK の前後関係に悩んでいたことがありましたが、これで無事解決ができそうです。

create task a4
after a1, a2, a3
as select 1;

実際に触ってみた

リリースするクエリは下記のものになります。

-- TASK_1
create or replace task tr_daisuke_harato.task.test_1
    warehouse = demo_wh
as
create or replace table tr_daisuke_harato.test.test_1
as
select
    current_timestamp() as test,
    1 as task_no
;
-- TASK_2
create or replace task tr_daisuke_harato.task.test_2
    warehouse = demo_wh
    after tr_daisuke_harato.task.test_1
as
create or replace table tr_daisuke_harato.test.test_2
as
select
    *
from
    tr_daisuke_harato.test.test_1
union
select
    current_timestamp() as test,
    2 as task_no
;
-- TASK_3
create or replace task tr_daisuke_harato.task.test_3
    warehouse = demo_wh
    after tr_daisuke_harato.task.test_1
as
create or replace table tr_daisuke_harato.test.test_3
as
select
    *
from
    tr_daisuke_harato.test.test_1
union 
select
    current_timestamp() as test,
    3 as task_no
;
-- TASK_4
create or replace task tr_daisuke_harato.task.test_4
    warehouse = demo_wh
    after tr_daisuke_harato.task.test_2, tr_daisuke_harato.task.test_3
as
create or replace table tr_daisuke_harato.test.test_4
as
select
    *
from
    tr_daisuke_harato.test.test_2
union 
select
    *
from
    tr_daisuke_harato.test.test_3
union
select
    current_timestamp() as test,
    4 as task_no
;

各TASKの処理は、TASKの番号と作成されたときのタイムスタンプを持つようにしています。また親TASKの実行結果もUNION処理を行い結合するようにしています。

さて、各TASKをRESUMEしてみます。(task_1に関してはexcute taskを使用するためresume を行いません)

alter task tr_daisuke_harato.task.test_2 resume;
alter task tr_daisuke_harato.task.test_3 resume;
alter task tr_daisuke_harato.task.test_4 resume;

上記のクエリを実行後、excute taskを実行しtask_1を動かしてみましょう。

execute task tr_daisuke_harato.task.test_1;

各TASKの実行結果は以下のようになりました。

task_1

test task_no
2022-09-14 18:15:12.363 -0700 1

task_2

test task_no
2022-09-14 18:15:12.363 -0700 1
2022-09-14 18:15:19.916 -0700 2

task_3

test task_no
2022-09-14 18:15:12.363 -0700 1
2022-09-14 18:15:15.290 -0700 3

task_4

test task_no
2022-09-14 18:15:12.363 -0700 1
2022-09-14 18:15:19.916 -0700 2
2022-09-14 18:15:15.290 -0700 3
2022-09-14 18:15:31.558 -0700 4

まとめ

TASKの依存関係をafterで指定するだけで、いい感じに実装されることが確認できました。
様々なところで使われちゃいそうな気がします。

これからもSnowflakeの新機能についてウォッチしていきたいと思います。

参考文献

Discussion