
Google CloudのDataformでBigQueryにテーブルを作成してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
データアナリティクス事業本部の鈴木です。
Google CloudのDataformでBigQueryにテーブルを作成してみたので、試したことをまとめました。
Dataformは記事執筆時点ではプレビュー版で、この記事もプレビュー版について記載しています。先立って試してみたい方の参考になりましたら幸いです。
Dataformとは
SQLを使用してBigQueryでスケーラブルなデータ変換パイプラインを開発・運用できるサービスです。 製品紹介ページは以下になります。
主な機能として、以下の3点が紹介されています。
- データ変換を管理するためのオープンソースのSQLベースの言語:Overview of Dataform coreに記載がありますが、オープンソースのソフトウエアのDataform Coreを使うことで、テーブル定義の一元的な作成や依存関係の構成など、さまざまな機能をSQLを使用して実現できます。
-
データパイプラインのフルマネージドサーバーレスオーケストレーション:SQLワークフローを手動およびほかのサービスによりトリガーすることで、最新バージョンのコードを使用してテーブルを更新することができます。
-
SQLで開発を行うための多機能のクラウド開発環境:ウェブブラウザからテーブルの定義・リアルタイムのエラーメッセージに関する問題の修正・依存関係の可視化・Gitへの変更のcommitなどを行えます。
検証の概要
今回は以下の3点を確認しました。
- Dataformのリポジトリ・ワークスペースを作成する。
- BigQueryのデータセットにテーブル・ビュー・マテリアライズドビューを作成する。
- テーブルに説明をつける。
参考にしたのは以下の3つのガイドです。
- Quickstart: Create and execute a SQL workflow in Dataform:Dataformのリポジトリ・ワークスペースを作成し、BigQueryにテーブルやビューを作成する。
- Create a table:SQLを使って、テーブル・ビュー・マテリアライズドビューを作成する。
- Add table documentation:テーブルおよびカラムに説明をつける。
やってみる
リポジトリの作成
まずはQuickstart: Create and execute a SQL workflow in Dataformを参考に、ワークスペースの作成までを行いました。
作業用のGoogleCloudプロジェクトに切り替えた状態で、ドキュメントのBefore you beginのEnable the BigQuery and Dataform APIs.でEnable the APIsボタンをクリックし、ガイドに従ってAPIを有効化しました。



また、IAMと管理のIAMから、自分が作業するユーザーに以下の権限があることを確認しました。
- Dataform Admin (
roles/dataform.admin) :レポジトリ向け - Dataform Editor (
roles/dataform.editor) :ワークスペース・ワークフロー実行向け
早速リポジトリを作ってみました。BigQueryのコンソールにて、Dataformを左側のメニューからクリックし、Dataformの画面から+リポジトリを作成を押しました。

リポジトリIDはquickstart-repositoryとし、リージョンはasia-northeast1としました。

作成を押すと、リポジトリを作成しましたというメッセージが表示されます。このとき、Dataformがワークフローを実行するサービスアカウントがなにか表示されます。これは後で設定時に必要なので覚えておきましょう。
ちなみに忘れてしまった場合も、DataformのサービスアカウントIDはGrant Dataform access to BigQueryに記載されているので心配要りません。
リポジトリができたら、リポジトリの一覧から作成したリポジトリをクリックします。

ワークスペースの作成
次に、ワークスペースを作成します。ワークスペースについては、Introduction to developing in a workspaceに説明があります。ブランチのような、チームのリポジトリの編集可能なコピーにアクセスできる機能で、ほかのユーザーに影響を与えずコードを開発し、commitしたものをリポジトリにpushできます。コード編集だけでなく、SQLで定義したワークフローのグラフ表示の確認や、ワークフローの実行もできます。
CREATE DEVELOPMENT WORKSPACEをクリックし、ワークスペースを作成します。

開発ワークスペースを作成が開くので、ワークスペースIDを入力し、作成します。今回はquickstart-workspaceとしました。

以下のようにワークスペースが作成されました。

今回はまっさらのリポジトリに新しくワークスペースを作成したので、ワークスペースの初期化をしておきます。ワークスペースを初期化をクリックします。

以下のように初期プロジェクトが準備されました。

試しに、6件の変更をCOMMITを押すと、以下のようにコミットを作成することが可能できました。

SQLによる定義の作成
まず、QuickStartに沿って、データソースとなるquickstart-source.sqlxと、quickstart-table.sqlxを作成しました。
quickstart-source.sqlxは、definitionsのメニューからファイルを作成を押すと、ファイル名を指定してファイルが作成できました。

quickstart-source.sqlxに、以下のようにビューを作成する定義を記載しました。

config {
type: "view"
}
SELECT
"apples" AS fruit,
2 as count
UNION ALL
SELECT
"oranges" AS fruit,
5 as count
UNION ALL
SELECT
"pears" AS fruit,
1 as count
UNION ALL
SELECT
"bananas" AS fruit,
0 as count
また、quickstart-table.sqlxも作成しました。

config {
type: "table"
}
SELECT
fruit,
SUM(count) as count
FROM ${ref("quickstart-source")}
GROUP BY 1
編集し、コミットしていないファイルについては、ファイル名の左側に*が付くようです。
サービスアカウントへのアクセス権限追加
IAMと管理のアクセス件の付与から、アクセス権の付与を行いました。

リポジトリ作成時に記載があったサービスアカウントIDを新しいプリンシパルに入力しました。ロールに、BigQueryデータ編集者・BigQueryデータ閲覧者・BigQueryジョブユーザーを追加し、保存しました。

アクションの実行
Dataformの画面に戻り、実行を開始からすべてのアクションを押しました。

ALL ACTIONSから、実行を開始を押しました。

以下のように、BigQueryにリソースが作成されました。

EXECUTIONSタブから実行履歴が確認できます。今回は成功したのでBigQueryにリソースが作成されていましたが、もしできていなかったり、結果が不安な場合は、こちらをみるとよいです。


マテリアライズドビューの作成
これまでの操作でテーブルとビューを作成しましたが、マテリアライズドビューも作成してみます。
マテリアライズドビューの定義については、Create a tableに例があったので試してみました。
以下のようにquickstart-materialized-view.sqlxを作成しました。
config {
type: "view",
materialized: true
}
SELECT
fruit,
count
FROM ${ref("quickstart-table")}

ところで、ここでコンパイルされたワークフローを確認してみました。
COMPILED GRAPHタブから確認ができました。

今度は個別にアクションを実行してみました。quickstart-materialized-view.sqlxを開いた状態で、SELECTION OF ACTIONSから実行しました。

以下のように作成されました。

既存リソースの更新
データソースとなるビューについて、定義を更新してみました。以下のようにquickstart-source.sqlxを修正しました。右上に実行ボタンがあるので押してみたところ、クエリ結果が表示されました。ただしこれだけではBigQuery側には反映されていませんでした。

アクションを個別に実行することで、BigQuery側にも定義が反映されました。

テーブル・カラムへの説明の設定
Add table documentationを参考に、テーブルとカラムに説明を付けてみました。
SQLXテーブル定義ファイルのconfigブロックに、descriptionを追加することで、テーブルに説明を付けることができます。また、columns: {}を追加することで、カラムに説明を付けることもできます。

実行すると、テーブルの説明が付けられていることが確認できました。

カラムにも説明が付いています。

最後に
Google CloudのDataformでBigQueryにテーブルを作成してみたので、試したことをまとめました。
レポジトリを使って、チームでテーブル定義ファイルの開発ができますし、依存関係のグラフも可視化してくれるのでテーブル間の関係性が分かりやすくとても便利でした。
今回は基本的な機能を中心に試してみましたが、ドキュメントを読みつつ、ほかの機能も試してみたいと思います。







