
Dataformスタートアップガイド
クラウド環境でのETL(Extract, Transform, Load)処理は、効率的なデータ管理の鍵を握ります。
Google CloudのDataformを使用すれば、ELTプロセスにおけるデータ変換を行い管理することができます。
今回はそのスタートアップガイドとして、Dataformの基本操作について解説したいと思います。
0からDataformを使い始めてviewとtableを作成するところまでをゴールとし、Dataformのチュートリアルを参考にしながら整理しました。
1. Dataformとは?
Dataformは、Google Cloud BigQuery向けのデータ変換ツールであり、SQLXというSQLの拡張言語を使ってデータの管理・変換を簡単に行えるプラットフォームです。
データパイプラインの管理を効率化し、データエンジニアやアナリストがデータの品質を保ちながら業務を進めるのに役立ちます。
Dataformの主な特徴は下記になります。
Dataformの主な特徴
SQLベースのデータ変換が出来る
BigQueryとの連携が容易である
ワークフロー管理が容易である
データ品質チェックが自動化出来る
Gitを活用したバージョン管理が出来る
2. Dataformの基本操作
(1)Google Cloud Consoleにアクセス
https://cloud.google.com/cloud-console?hl=ja
アカウントがない場合は作成しておきます。Google Cloud を初めて利用される方は、90日間で$300のクレジットが付与される無料トライアルがあるので利用されると良いでしょう。
アカウントがある方はGoogle Cloud Consoleにアクセスします。
(2)APIを有効化
BigqueryAPIとDataformAPIについて有効化をしておきます。
左上のナビゲーションメニューからプロダクト一覧が確認できるので、その中のBigqueryとその配下のDataformをクリックします。
クリックすると自動的にAPIが有効になるか、有効化するページに遷移することが出来ます。

(3)IAMページで必要なロールを付与
IAMの許可ページにおいて、[Google提供のロール付与を含みます]を有効にし、Dataformのサービス アカウントを見つけて、[プリンシパルを編集] をクリックするとロールの編集が出来ます。
必要に応じて各ロールを選択していくのですが、今回は以下のロールを追加しておきましょう。
Dataform 管理者
Dataform 編集者
Bigquery データ編集者
Bigquery データ閲覧者
Bigquery ジョブユーザー

(4)Dataformでリポジトリの作成
それではDataformのトップページに行きましょう。
まず左上にリポジトリを作成ボタンがあるのでクリックします。
すると作成フォームが出てくるので、リポジトリID・リージョン・サービスアカウントを選択すると、リポジトリを作成することができます。
リポジトリはdataformの構成ファイルとパッケージの格納場所で、gitとも接続が可能です。
今回は下記の名前でリポジトリを作成してみました。
test-repository

(5)リポジトリ内でワークスぺースの作成
リポジトリを作成したらその中に入りましょう。
先ほどと同じように、左上に開発ワークスペースを作成というボタンがあるのでクリックします。
するとワークスペースIDの入力が求められますので、任意の名前を入力して作成が完了です。
ワークスペースは、リポジトリ内のファイルの開発やテスト実行を行える場所です。
今回は下記の名前でワークスペースを作成してみました。
test-workspace

ワークスペースが作成出来たらその中に入り、ワークスペースの初期化ボタンがあるので初期化をしておきましょう。
初期化により、dataformに必要な構成ファイルが作成されます。

(6)ワークスペース内でスクリプトの作成
ワークスペース内で、先ほどの初期化によってdefinitionsフォルダが出来ていますので、その配下にスクリプトファイルを作成していきましょう。
definitions横の3点マークからファイルの作成をクリックします。
するとファイルパスの追加を求められるので、ここでファイル名を記入し、形式は.sqlxとしておきます。

今回はサンプルとして、viewを作成するクエリ2つと、それらを使ってtableを作成するクエリの計3つのスクリプトファイルを作成してみます。
quickstart-firstview.sqlx(view1作成用)
quickstart-secondview.sqlx(view2作成用)
quickstart-table.sqlx(table作成用)
DataformではSQLXというSQLの拡張言語を使って記述するのですが、
ここでの大きな特徴は、SELECT文の他に、config という設定箇所がある点です。
configの中でtype:”view”と設定すればviewを作成することが出来ます。
わざわざCREATE文を書く必要がないため便利ですね。
さらにassertionsを記述することにより、テスト追加が出来ます。
今回は、組み込みアサーションであるuniquekeyを入れてみましょう。
組み込みアサーションというのは、そのテスト内容が Dataform 側でデフォルトで準備されているものです。
ここで使用したuniquekeyは、指定したカラムで重複がないことをテストしています。
▼quickstart-firstview.sqlx(view1作成用)
config {
type: "view",
assertions:{
uniqueKey:["fruit"]
}
}
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-secondview.sqlx(view2作成用)
config {
type: "view",
assertions:{
uniqueKey:["fruit"]
}
}
SELECT
"lemons" AS fruit,
4 AS count
UNION ALL
SELECT
"strawberrys" AS fruit,
0 AS count
▼quickstart-table.sqlx(table作成用)
config {
type: "table"
}
SELECT
fruit,
count
FROM ${ref("quickstart-firstview")}
UNION ALL
SELECT
fruit,
count
FROM ${ref("quickstart-secondview")}
クエリを作成後に右上の実行ボタンを押すと、実行結果を画面下部でプレビューすることが出来ます。
※但しこの段階では、3つのクエリのうちquickstart-tableのプレビューが出来ず、クエリ検証エラーが出てしまいます。
これはなぜかというと、quickstart-tableでquickstart-firstviewとquickstart-secondviewを参照しているのですが、クエリを作成しただけではこれらのviewがBigQuery に まだ存在していないからです。(このエラーはこの後SQLワークフローを実行する際に解消されます)
dataformではサンプルクエリのように、ref 関数を使うことで他で作ったデータソースを参照し、依存関係を作成出来るのが特徴です。
依存関係は、ワークスペース内のCompiled graphタブで把握出来るので確認してみて下さい。

それでは次の項目以降で、実際にviewやtableを作成していきましょう。
(7)スクリプトのコミット&プッシュ
まずは先ほど作成したファイル群について、左上でコミットとその後プッシュが出来るようになるので実行しておきます。
プッシュ後、ワークスペースは最新の状態ですと表示が出たら成功です。

(8)リポジトリ内でリリース構成の作成
リポジトリのトップ画面から、開発ワークスペースタブの右側にリリースとスケジュールのタブがあるのでクリックします。
ここでリリース構成を作成しましょう。
任意のリリースID・スケジュール頻度・タイムゾーンを指定します。
リリース構成は、SQLXファイルを実際に動かせるSQLに変えるための設定を作るところです。
今回は下記の名前でリリース構成を作成してみました。
production

(9)リポジトリ内でワークフローの実行
リリース構成が出来たので、ワークフローを実行する準備が整いました。
ワークフローは自動化して設定したスケジュールで動かすことも出来るのですが、今回は手動でワークフローを実行していきます。
リリース構成の右側に実行を開始ボタンがあるのでクリックすると、手動ワークフローの実行フォームが出てきます。
先ほどのリリース構成とSelection of actionsで該当するアクション(今回はviewとtable作成用のクエリになります)を選択し、実行を開始しましょう。

実行結果は、Workflow Execution Logsタブで詳細を確認することが出来ます。(ステータスにチェックマークがついていれば成功です)

それでは、Bigquery Studioでも確認してみましょう。
dataform配下に、無事にviewとtableが作成されているのが確認できました。

3. まとめ
今回はDataformのスタートアップガイドとして、基本操作について解説しました。
興味を持った方はDataformを始めてみてはいかがでしょうか。
Dataformを活用することで、SQLの拡張言語でデータの変換・管理を簡単に自動化でき、BigQueryとの統合もスムーズに行えます。
データ管理を効率化したい方は検討してみてください。
データ分析に興味のある方募集中!
コグラフ株式会社データアナリティクス事業部ではPythonやSQLの研修を行った後、実務に着手します。
研修内容の充実はもちろん、経験者に相談できる環境が備わっています。
このようにコグラフの研修には、実務を想定し着実にスキルアップを目指す環境があります。
興味がある方は、下記リンクよりお問い合わせください。