BigQuery 向けデータパイプラインサービス「Dataform」の基本的な使い方
この記事は Google Cloud Japan Advent Calendar 2023 (入門編) の 20 日目の記事です。
こんにちは、Google CloudでDataAnalyticsを担当している山田です
本日はDataformの紹介をしたいと思います!
Dataformとは
BigQuery上でデータ変換を行う複雑なSQLワークフローを開発、テスト、バージョン管理、スケジュール設定することが出来ます。
Dataformのようなパイプライン管理ツールを使わない場合、SQLのバージョン管理や、テーブルAの後にテーブルBを作りたいといった依存管理などをどうするか考えなくてはいけません。
そのような課題を解決してくれるのがDataformになります。
Dataform自体の利用には料金がかからないというのも大きな特徴です!
Dataformの構成要素
Dataformは以下の4つの要素から成り立っています。
- リポジトリ
- SQL ワークフローを構成する SQLX ファイルと JavaScript ファイルのコレクション、Dataform 構成ファイルとパッケージの格納場所。git と接続可能。
- 開発ワークスペース
- リポジトリ内ファイルの開発やテスト実行を行う。
- リリース構成
- リポジトリ内ファイルのコンパイル設定。
- ワークフロー構成
- SQL ワークフロー アクションの実行設定。cron 形式で実行時間を指定可能。
Dataformの開発ではリポジトリの中にSQLXファイルというものを作成し、そこで書かれたSQLをマネージドに実行することが可能となります。
Dataformのはじめ方
リポジトリ作成
では実際にどのようにDataformを使い始めれば良いかみていきましょう。
DataformはBigQuery配下にありますので、こちらからまずDataformのトップページに行ってみたいと思います。
以下の画面からまずはリポジトリを作成します。
今後サービスアカウント経由でクエリが実行されるため、サービスアカウントに必要な権限をつける必要があります。
上記の設定の場合ですとDataformのデフォルトサービスアカウントに対して、roles/bigquery.userなどを付与する必要があります。
ワークスペース作成
リポジトリが出来たらリポジトリの中に入りましょう。
まずは開発ワークスペースの作成を行います。
作成されたワークスペースの中に入ると「ワークスペースを初期化」というボタンが見えると思いますので、こちらを押します。
こちらの初期化によって、Dataformに最低限必要なファイルが作成されます。
以下のような6つのファイルが自動的に生成されます。
- first / second _view.sqlx
- sqlxのサンプルファイル
- .gitignore
- gitの管理対象外とするファイルを指定するためのファイル
- dataform.json
- dataform全体の設定や定数などを指定できるファイル。データセット名などの指定が可能です。
- package.json
- javascriptのパッケージを管理するためのファイル。追加したいパッケージがある場合こちらに記述します。
- package-lock.json
- package.jsonに書かれたパッケージをインストールする際に自動的に作られるファイル。手動で修正することはありません。
設定ファイルの中身を見に行ってみましょう。
- defaultSchema
- Dataform がアセットを作成する BigQuery データセット。初期値は”dataform”になるので、任意のデータセット名に変更してください。
- assertionSchema
- Dataform がアサーション結果を含むビューを作成する BigQuery データセット。データ品質確認(アサーション)を行った際の結果などがおかれるデータセットになります。任意のデータセット名に変更してください。
- warehouse
- bigquery に設定する必要があります。
- defaultDatabase
- Dataform がアセットを作成する Google Cloud プロジェクト ID。プロジェクト名ではないことに注意です。
- defaultLocation
- デフォルトの BigQuery データセットのロケーション。
初期値で作られるのは上記ですが、これ以外に定数 / 変数 を定義することも可能です。
SQLXファイルを見てみたいと思います。
16行目のSQL文を使ってviewが作られるのだなということがなんとなくわかるかなと思います。
SQLXファイルでは大きく 設定箇所(config) と SQL文 に分かれています。
configの部分には対象となるアセットを書くことが出来るので、typeに table と書くと SQL文に応じたtableが作られます。
自分で create table … のように書く必要はありません。
SQLXファイルを試しに実行してみたいと思います。
SQLXファイルの実行の仕方は2つあります。
- 設定通り実行する方法
- SQL文だけ実行する方法
まずは書いてあるSQL文だけ実行してみたいと思います。
右上の実行ボタンから実行します。
このようにすると view は作られず、SQL文のみが実行されます。
続いて、SQLX文全体を実行してみたいと思います。
実行を開始 -> 操作 から対象となるSQLXファイルを選んで実行を開始してください。
以下のようなポップアップが出るかと思います。
ここで、詳細を押すと実際の実行ログを見ることが出来ます。
また、second_view.sqlxをみていただくとわかりますが、他で作ったsqlxファイルを ref を使って参照することができます。
このような依存関係を作ることでデータリネージ(テーブル同士の依存関係)が作成されるのもDataformの特徴です。
ではこれらのsqlxファイルをスケジュール実行する設定を行ってみたいと思います。
まずは、作られたファイルをCommit + Pushする必要があります。
(Dataformはgitに連携できますが、独自のリポジトリを使うこともできます)
こちらから COMMITを押していきましょう。
COMMITする際に最近ファイルの差分も見えるようになりました。
COMMITした後はPUSHをします。
「ワークスペースは最新の状態です」となったら成功です。
リリース構成作成
ワークスペースができたら次はSQLXファイルを実際に動かせるSQLに変えるためのビルド設定を作っていきます。
リポジトリのトップ画面から RELEASE CONFIGRATIONS を選びます。
こちらから新しいリリースの構成で作っていきます。
どれくらいの頻度でビルドするのか、タイムゾーンなどを設定します。
ビルドの頻度としてはSQLを実行したい頻度に合わせるのが良いかと思います。
(毎日10時にSQLを実行したいとしたらその前にビルドを終わらせたいので、ビルドは毎日8時に行うなど)
ワークフロー構成作成
ビルド構成が作成できたら次は実際にSQLをスケジュール実行するためのワークフロー構成を作っていきます。
リポジトリのトップ画面から WORKFLOW CONFIGRATIONS を選びます。
こちらから新しいワークフロー構成で作っていきます。
先ほど作成したリリース構成を選び、スケジュールをcron形式で指定します。
これでスケジュール実行の設定も完了しました。
スケジュール実行された後は実際にviewが作られているか確認もしてみましょう。
以下のようにviewが作られていると思います。
まとめ
このように
- リポジトリ作成
- SQLXファイル作成
- リリース構成作成
- ワークフロー構成作成
というステップでDataformを使ったパイプラインを構成することが出来ました。
スケジュール実行はワークフロー構成経由でなくてもCloud Schedulerや Eventarc 経由でWorkflowsを呼び出したり、Cloud Composer経由でも実行することが出来ます。
本日紹介できなかった更新データを自動で取っておいてくれる機能などもありますので、是非是非Dataformを試してみていただけたらと思います!
Discussion