データ基盤におけるDataformの活用
Dataformとは?
DataformとはGoogle Cloudにて提供されているデータ変換パイプライン用のサービスです。
2023年1月時点ではまだプレビュー段階で、リージョンもアジアでは提供されていません。
2020年にGoogle Cloudによって買収されたサービスで、データガバナンスを効かせるという観点で重要な役割を果たすサービスです。
細かい話は公式サイトを見るのが一番良いかと思います。
買収時の記事はこちら
https://cloud.google.com/blog/ja/products/data-analytics/welcoming-dataform-to-bigquery
公式サイトはこちら
https://cloud.google.com/dataform?hl=ja
現在は下記のようにBigQueryの画面内にて提供されています。
Dataformの調査を開始した理由
なぜ今回Dataformの採用を検討し検証作業を進めているかというと、
-
テーブルのデータカタログが欲しい(スプレッドシート管理等だと最新のものにアップデートされない)
-
いろんなワークフローが動いているので、テーブル間の関係性が明解になっているものがない
といった課題を解決するためです。
そして、何より重要なのが、Dataform自体は無料ということです。
もちろん、Dataformを実行するための基盤(Cloud Composer等)を準備した場合はそちらの費用がかかりますが、自分で手動で実行している限りはなんとお金がかかりません。
つまり、試したい放題です。このとっつきやすさがDataformの一つの売りだと思います。
また、Git管理ができることで、バージョン管理が容易というところも大きなポイントです。ガバナンスを効かせると銘打っておきながら差分を管理できないというのはなかなかあり得ない話かなと思いますが、GitHub等でホスティングすることで、プルリクエストによる共同作業やGitHub ActionsによるCI/CD等、幅が大きく広がってくるところも大きいですね。
Dataformにおけるコーディングとは?
言語について
Dataformにおいて使用する言語は主に sqlx
と JavaScript
になります。
基本的には sqlx
で完結させるようになるべく書きつつ、一部、動的に変更される部分などを JavaScript
でカバーしていくイメージです。
sqlx
内は主にテーブルに関する設定を記載する config
パートと、実際にテーブルを作成するためのクエリパートに分かれます。
この config
パートにテーブルの説明文などのメタ情報を記載できます。
また、データレイク層などの特に加工なく取り込んだだけのテーブルに対しては declaration
という形でどういった構成かだけを記載します。
例えば、下記のような形のものが例として挙げられます。
config { type: "table", tags: ["test"], description: "テスト用テーブルです", columns: { num: "数字が入っている列です", moji: "文字列が入っている列です" } } SELECT 1 AS num, 'test' AS moji
これだけでテーブルを定義でき、実行することでテーブルの中身をこの通りに更新出来ます。(incrementalにしたり、ビューやマテビューにしたりすることも可能です)
ファイル構成
このように、sqlx
については、基本的にBigQuery上の1テーブルを1つの sqlx
ファイルに対応させるイメージになります。
もちろん、テーブルを作るために別のテーブルを参照することがあるかと思いますが、その場合は ref
関数を用いて他のテーブルのファイルを参照して引っ張ってくることになります。
生のテーブル名を書かずにそのようにすることで、テーブル間の依存関係が明らかになり、これが Dataformの大きな強みとなります。
データ基盤におけるガバナンスの担保というのは、メタデータも重要ですが、テーブル間の依存関係を明らかにしておくことだと思います。
そうすることで、どこかのテーブルに不備があった場合の影響範囲も容易に予測でき、かなり助かる印象です。
Dataformの仕組み
実行の流れ
sqlx
ファイルを作っていったら、いよいよ実行です。
Dataformで実際にテーブルを更新する際は、まず sqlx
をコンパイルします。
そうすることで、コンパイルのタイミング時点での日付情報などをテーブル作成のためのクエリに組み込むことが出来ます。
実行対象のsqlxファイルの選択
なお、どの sqlx
を実行するかについては、直接ファイル(=テーブル名)を指定することもできます。また、タグを sqlx
ファイルの config
部分にて設定出来ますので、そうすることでまとめて特定のタグのテーブルを更新することが出来ます。
Dataform公式ドキュメントでは、 daily
のようなタグをつけることを推奨していたりします。
(そうすることで、 daily
タグに対して実行するだけで毎日更新を走らせられるというわけですね)
実行の自動化はCloud ComposerやCloud Schedulerなどを使うことで容易に可能です。(また別途触れたいと思っています)
まとめ
今回はDataformについて紹介しました。
まだ弊社としては検証段階ですが、ガバナンスの向上という観点ではかなり一役買いそうな印象です。
何より無料なので(2回目)、検証等は誰でもできると思います。少しでもBigQueryにデータセットを抱えている場合、一度試してみることをオススメします。
また検証の詳細やTipsについても本ブログで触れられればと思っております!