こんにちは。テクニカルサポートチームの大村です。
今回はTreasure DataのREST APIとQueryを使った少し凝った作りのWorkflowについて紹介します。
Workflowを定期的に動作させていると実行時間の変遷を確認しておくことが管理の上で重要になります。 前回の記事でご紹介した通り、Workflow Monitoringで収集したデータを使えば特定のWorkflowの実行時間の変遷を確認することが可能です。
Workflow Monitoringのデータを使ったTDオブジェクトの一覧化 - Treasure Data - Support Engineering Team blog
これを使えば特定のWorkflowの特定のSession(Attempt)の実行時間全体が通常と比べて早い、遅いというのを確認することができると思います。 ただし、これはあくまでWorkflow全体になりますので、どのタスクが遅かったのかを確認するには各Session(Attempt)のページを開いて、両者を比較確認していく必要があります。 タスク数が多くない場合はこの作業は特に問題なくできるかと思いますが、タスクが100、200と多い場合にはこちらは非常に大変な作業になります。
そこで今回紹介するのがタスクレベルでの実行時間を比較するWorkflowになります。
こののWorkflowではAttempt Idを指定すると、そのAttempt Idのタスクレベルの情報をREST APIで取得して、TDのテーブルに格納し、クエリを使ってタスク毎の実行時間を比較します。 Attempt Idは何個指定してもいいですが、Workflowの実行毎にタスクが異なるようなWorkflowの場合、そのままではうまく動作しない可能性があります。 その場合はgen_queryやcomapre_taskの比較のためのクエリを生成、実行している部分を調整するとよいでしょう。
導入+実行の手順はREADMEを参照してもらうと良いと思いますが、注意点としては比較したWorkflowのAttempt Idを指定するという点になります。Session Idではありません。

Workflowを実行して、compare_taskのクエリ結果を確認すると各タスクの実行時間がAttempt Id毎に比較しやすいように出力されます。 このWorkflowを利用することで数百のタスクが存在するWorkflowであっても容易にタスクレベルで実行時間を比較できるようになります。
ぜひ、利用してみてください。