
最近導入したDataformのワークフローについて紹介したいと思います。
はじめに
弊社の在宅医療・介護業界向け訪問スケジュール管理サービスである「ZEST SCHEDULE」で登録・蓄積されたデータを可視化できる「ZEST BOARD」というサービスがあり、BigQuery x Looker を使ってダッシュボードのサービス提供・運用をしています。
データの流れとしては、ZEST SCHEDULEのDBに登録されたデータについて、Datastreamを使ってニアリアルタイムにBigQueryへデータが転送されます。
BigQueryに溜まったデータを、ある程度使いやすい粒度で集計・加工し、そのデータを使ってLookerで表示しています。
時が立つにつれ・・・
「使いやすい粒度で集計・加工」の部分はViewで対応していましたが、データ取得時に毎回集計処理が行われるため、データ量の増加に伴って集計に掛かる時間・コストも同様に増加していきました。
Viewをやめテーブル化しようと思ったのですが、データは絶えず流れてくるので、テーブルをある一定頻度で最新化する必要がありました。
(ちなみにマテリアライズド・ビューもありますが、BigQueryの契約プランによっては利用できません。)
テーブルを定期的に最新化するにはどうれば。。。
そこでワークフローの登場です!!
機能概要
Dataform のリリース構成とワークフロー構成を使用して、実行をスケジュールできます。設定手順は以下の通り、単純で誰でも出来る感じとなっております!
設定方法
Dataformのリポジトリのトップ画面にある「リリースとスケジュール」に遷移します。

まずはリリース構成を作成します。

適当なリリースIDを入力し、リリース対象となるBranch名を指定し、コンパイル頻度を設定します。オンデマンドも指定可能です。
ステージングや本番環境などの実行環境に応じて、コンパイル変数なども設定できます。

頻度に関しては、毎時・毎日・毎週・毎月・カスタムの5種類から選べます。
カスタムを指定するとcronでのスケージュル設定が可能となります。

リリース構成の詳細画面に遷移すると、スケジュール実行でのコンパイル結果と手動実行でのコンパイル結果が表示されます。
ここでコンパイルした結果が次のワークフロー構成で使用されます。

次にワークフロー構成です。適当な構成IDを入力、リリースID・実行するサービスアカウントを指定し、スケジュール設定を行います。

最後に実行したいアクションを指定します。
Dataformで定義したsqlxファイルを指定するか、sqlxファイルでtag設定している場合はtag単位で複数指定することも出来ます。

設定は以上となります。後は実行されるのを待つだけです。

まとめ

最初、既存サービスであるWorkflowsからDataformをキックするのが面倒だなと思って探してみたら、このワークフローが見つかりました。
こんなそばにいたのね!ありがとう、ワークフロー!
tagの指定やテーブル・Viewの依存関係もsqlx側で定義しておけば、実行順序も自動でやってくれますし、スケジュール頻度を組み合わせることで、日中・夜間・週末などタイミング調整が手軽にできるので、非常に便利かと思います。