Matillionのプロジェクトの仕様(ver1.63)についてご紹介。
プロジェクトをまたいでしまうとできないことがあるという話。
プロジェクトの中でできること
プロジェクトというのは、ジョブを置いておくところです。
環境設定ができるので、接続しているデフォルトで指定するデータベースやスキーマをプロジェクトごとに変えることができます。
プロジェクトを作り、環境設定を済ませると、ジョブを作ることができます。作ったジョブはフォルダを作って整理することもできます。
また、作ったジョブはスケジュール登録をして定期実行をすることができます。
データパイプラインを作るとき、ジョブ間の依存関係が作られていくことがありますが、Matillionはorchestration jobを使うことで簡単に複雑なパイプラインが構築できます。
例:
Transformation job①の後にTransformationjob②を実行し、最後に外部の機械学習APIを呼び出して推論をして終了。この時、①にエラーが起きたら3回までやり直す。それでもだめなら後続の実行はやらない。
このような、順序を守ってジョブを実行、分岐させたいとき、orchestration jobではジョブ同士の処理フローを作れば完成。あとは実行スケジュールの設定をするだけ。
プロジェクトが違うとできないこと
orchestration jobで他のジョブを指定できるのは同じプロジェクトの範囲までです。
複数のプロジェクトで作ったジョブ同士では、前述のようなパイプラインは作れません。
例えば、プロジェクトAに属するパイプラインa-1とプロジェクトBに属するパイプラインb-1の実行が終わったらプロジェクトCの処理c-1,c-2を動かしたい、というとき。
これはa-1とb-1の処理が確実に終わった時間にc-1,c-2の実行スケジュールを設定するしかなくなります。
また、a-1,b-1がエラー終了になってしまっていたら後続のc-1,c-2の処理はしなくていい、ということはできなくなります。
プロジェクトを分けてしまうとこうしたジョブ間での断絶が起きてしまうので、正常終了の判定などをして連動させたいジョブは同じプロジェクトで作成するのがよいでしょう。
一応、環境(Environment)は複数作っておける※し、ジョブ単位で設定した環境以外のデータベースを選択できるため、プロジェクトをまたぐ、ということはmatillionの想定外なのだと思います。
※環境設定は複数保存できますが、Defaultとして選択できるのは常に1つです。別の環境を使う場合は切り替えを行います。
多分同じようなことを言っているMatillionコミュニティのポスト
Setting up multi-job dependency between Matillion jobs
プロジェクトまたぎ起因ではないですが、2つのスケジュール設定で依存関係を作りたい、で、サポートから「でっかいOrchestration Job作ってそれをスケジュール設定しな!」と言われている。
で、やりたいことはそうではないよということで要望を出している。
プロジェクトまたぎで依存関係作れないの問題も自動実行された結果を受け取って次のジョブを動かせば解決しそうなので、できないんだねと思いました。
私はいろいろあってプロジェクトまたぎ必須の運用にしちゃったし、そういうのはMatillionの基本機能でできない、ということだったので、基本機能じゃないところでできるようにしました。
ジョブの自動実行の成功/失敗の結果を出力しておき、後続のジョブたちはそれを確認してから動き始める、という方法で管理しています。
Matillionのことで相談したい場合はお問い合わせから。