中野智文のブログ

データ・マエショリストのメモ

AirFlow と格闘中(3)

nakano-tomofumi.hatenablog.com

のつづき。  

run で確認し、backfill で全体確認する

Makefile から呼び出す想定だと(スケジューラであるはずの AirFlow をそのような形で呼び出すこと自体おかしいという話もあるが、まずは移行から始まるので…)、コマンドは、 runbackfill になるはず。以前にも述べたが、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 で複数のタスクに分割した方が、いいような気もするが…。明日検証する(このブログはメモなんでまとめてから出すことはしない予定。あしからず)。

つづきは、 nakano-tomofumi.hatenablog.com