❄️
【新機能】複数の先行TASKを指定する機能を試してみる
【新機能】複数の先行TASKを指定する機能を試してみる
はじめに
2022年8月にリリースされた内容に、複数の親 TASK を TASK 構築時に指定できるというものがありました。Snowflakeの公式ドキュメントの画像が分かりやすいのでのせちゃいます。
上の図ではTASK D
の親TASKはTASK B
とTASK 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