|

2023-02-01

データ関連

データ基盤にガバナンスを効かせるためのDataform概要調査

DataformGoogle Cloudデータガバナンスデータ基盤

データ基盤における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__BigQuery__abc-cdp__Google_Cloud_コンソール_2023-01-18_18-03-26

Dataformの調査を開始した理由

なぜ今回Dataformの採用を検討し検証作業を進めているかというと、

  • テーブルのデータカタログが欲しい(スプレッドシート管理等だと最新のものにアップデートされない)

  • いろんなワークフローが動いているので、テーブル間の関係性が明解になっているものがない

といった課題を解決するためです。

 

そして、何より重要なのが、Dataform自体は無料ということです。

もちろん、Dataformを実行するための基盤(Cloud Composer等)を準備した場合はそちらの費用がかかりますが、自分で手動で実行している限りはなんとお金がかかりません。

つまり、試したい放題です。このとっつきやすさがDataformの一つの売りだと思います。

 

また、Git管理ができることで、バージョン管理が容易というところも大きなポイントです。ガバナンスを効かせると銘打っておきながら差分を管理できないというのはなかなかあり得ない話かなと思いますが、GitHub等でホスティングすることで、プルリクエストによる共同作業やGitHub ActionsによるCI/CD等、幅が大きく広がってくるところも大きいですね。

Dataformにおけるコーディングとは?

言語について

Dataformにおいて使用する言語は主に sqlxJavaScript になります。

基本的には 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の大きな強みとなります。

 

Compiled_graph_of_staging__BigQuery__abc-cdp__Google_Cloud_コンソール_2023-01-18_18-05-37

 

データ基盤におけるガバナンスの担保というのは、メタデータも重要ですが、テーブル間の依存関係を明らかにしておくことだと思います。

そうすることで、どこかのテーブルに不備があった場合の影響範囲も容易に予測でき、かなり助かる印象です。

Dataformの仕組み

実行の流れ

sqlx ファイルを作っていったら、いよいよ実行です。

Dataformで実際にテーブルを更新する際は、まず sqlx をコンパイルします。

そうすることで、コンパイルのタイミング時点での日付情報などをテーブル作成のためのクエリに組み込むことが出来ます。

実行対象のsqlxファイルの選択

なお、どの sqlx を実行するかについては、直接ファイル(=テーブル名)を指定することもできます。また、タグを sqlx ファイルの config 部分にて設定出来ますので、そうすることでまとめて特定のタグのテーブルを更新することが出来ます。

Dataform公式ドキュメントでは、 daily のようなタグをつけることを推奨していたりします。

(そうすることで、 daily タグに対して実行するだけで毎日更新を走らせられるというわけですね)

 

実行の自動化はCloud ComposerやCloud Schedulerなどを使うことで容易に可能です。(また別途触れたいと思っています)

まとめ

今回はDataformについて紹介しました。

まだ弊社としては検証段階ですが、ガバナンスの向上という観点ではかなり一役買いそうな印象です。

何より無料なので(2回目)、検証等は誰でもできると思います。少しでもBigQueryにデータセットを抱えている場合、一度試してみることをオススメします。

また検証の詳細やTipsについても本ブログで触れられればと思っております!

 


この記事の著者

プロフィール画像

伴 拓也

朝日放送グループホールディングス株式会社 DX・メディアデザイン局 デジタル・メディアチーム

アプリケーションからインフラ、ネットワーク、データエンジニアリングまで幅広い守備範囲が売り。最近はデータ基盤の構築まわりに力を入れて取り組む。 主な実績として、M-1グランプリ敗者復活戦投票システムのマルチクラウド化等。