以下、digdagのver.は0.8.21
困ったこと
以下のようにtd>を2回呼び出すと、1回めの結果を保存しておいた変数が2回めの実行後に書き換わってしまう
!include : config.dig
+td1:
td>: a.sql
store_last_results: true
+group: # td結果を保存したいがためだけのグループ
_export:
result1: ${td.last_results.result1}
result2: ${td.last_results.result2}
+show_results1:
echo>: result1=${result1}, result2=${result2}
+td2:
td>: b.sql
store_last_results: true
+show_results2:
echo>: result1=${result1}, result2=${result2}
# b.sqlの結果に書き換わってしまう
調べてわかったこと
以下に理由とworkaroundが書かれていた
- JavaScriptが参照のたびに実行される https://github.com/treasure-data/digdag/issues/351
- JavaScriptはタスク開始時に実行される(_export時点では実行されない)
- for_each>で先に実行しておくworkaroundがある
- 驚かれる挙動だと思うので変えたいかも
解決
workaroundを適用すると以下になる
!include : config.dig
+td1:
td>: a.sql
store_last_results: true
+group: # td結果を保存したいがためだけのグループ
for_each>:
result1: ["${td.last_results.result1}"]
result2: ["${td.last_results.result2}"]
_do:
+show_results1:
echo>: result1=${result1}, result2=${result2}
+td2:
td>: b.sql
store_last_results: true
+show_results2:
echo>: result1=${result1}, result2=${result2}
# a.sqlの結果のまま