AirFlow と格闘中(3)
nakano-tomofumi.hatenablog.com
のつづき。
run で確認し、backfill で全体確認する
Makefile から呼び出す想定だと(スケジューラであるはずの AirFlow をそのような形で呼び出すこと自体おかしいという話もあるが、まずは移行から始まるので…)、コマンドは、 run
か backfill
になるはず。以前にも述べたが、run
自体には依存タスクの実行は行わない(依存タスクの状態をみて実行するかどうかは決める)ので、普通に考えると、backfill
になるだろう。ただし、backfill
は日付の範囲指定を行うので、開始日と終了日を同じに日に指定するという、AirFlow としては想定外の使い方になるだろう(想定外の使い方というのは、想定外のエラーを引き起こしたりするので注意が必要)
また、backfill
では特にどのタスクをトリガーとして実行するか、みたいな指定はできない。全て実行されると思ったほうがいい(このあたりも特にドキュメントにはないが、使わないタスクなど DAG ファイルには書いてない前提なのだろう)。
複数コマンドを連続的にかつ失敗したらその行で終了したい
BashOperator
の説明には、次のようにある。
bash_command (string) – The command, set of commands or reference to a bash script (must be ‘.sh’) to be executed
これを見ると複数のコマンドが書けるらしい。単に複数の行で書いてあるだけのかもしれない。
Makefile では、複数のコマンド行と、行中にセミコロンで複数のコマンドを結合した場合(Makefileのしようというより、shの仕様かもしれないが)では結果が異なる。セミコロンで結合した場合には最後の exit 値がその行の exit 値となる。途中で失敗しても最後で成功したらその行は成功したことになる。
BashOperator
ではどうなるのだろう。まだ複数行の検証をしていないので、検証をしてみたい。
複数行なら、python で複数のタスクに分割した方が、いいような気もするが…。明日検証する(このブログはメモなんでまとめてから出すことはしない予定。あしからず)。