Dataformを使ってみた (BigQuery)
Dataformとは?
DataformとはBigQueryに完全に統合されたツールで、BigQuery上でデータ加工(ELT)ができるツールです
Dataformの特徴
・SQLXという言語でクエリ文を定義
・タスクの依存関係などを定義して、データパイプラインを作成することができる (スケジューリングもできるようになりました!)
以下のような依存関係を作ることができます
SQLXとは?何がいいの?
SQLは使っているけど、SQLXって聞いたことない。。。そんな人も多いのではないでしょうか。
SQLXとは何かというと、SQLの拡張言語のことで、おそらくSQL extensionの略なんじゃないかと思っています。
実はSQLだと次のような課題が出てきます。
・再利用性が低い(関数やメソッドを作成し、それを異なるスクリプトで簡単に再利用することが難しい)
・コード管理やバージョン管理がしにくい
・データの整合性を確かめるテストができない
・SQL文の説明であったり、Readme的なものは別途システムを用意しないといけない
・SQLのタスクの依存関係を作るのが難しい
この辺りを実装しようとすると、UDFやスケジュールドクエリやworkflowsなどを活用して組み立てる必要がありました。。。
しかし!!!この辺りの課題をSQLXでは解決してくれる言語になっています。
SQLXについての公式ガイドはこちら
Dataformの料金
Dataformでworkflowを作る分には無料ですが、BigQueryのクエリ料金が別途発生します。
Dataformの全体像をつかもう
Dataformはどんな構成で成り立っているのかを見ていきましょう
DataformはBigQueryに完全統合されており、内部にGitのrepositoryを有しています。
その中のワークスペースと呼ばれるものがGitHubなどで言われるBranchのようなものです。
実際のコーディング自体はリポジトリの中の開発ワークスペースで行います
Dataformのファイル構成
以下の4つのフォルダーとファイルだけ抑えておけば一旦OKです!
ディレクトリー or ファイル | 説明 |
---|---|
definitionsフォルダー | .sqlxファイルを管理しておくフォルダー |
includesフォルダー | java scriptの関数などをここで管理します |
dataform.jsonファイル | プロジェクト ID と BigQuery スキーマを含むデフォルトの Config file |
package.jsonファイル | Java ScriptパッケージをインストールするためのNPMパッケージマネージャーの設定をここではします |
実際にDataformを使ってみよう!!
クイックスタートに沿って実施していきます
Dataform利用にあたっての前提条件
リポジトリの Dataform 管理者 (roles/dataform.admin)
ワークスペースとワークフロー呼び出しの Dataform 編集者 (roles/dataform.editor)
の権限が必要です
DataformはBigQueryのメニューからアクセス
「リポジトリを作成」をクリック
リポジトリIDに「quickstart-repository」
リージョンに「europe-west4」を入力
quickstart-repositoryというrepositoryが作成されていればOK
quickstart-repositoryをクリック
repositoryが作れたので次は開発ワークスペースを作成していきます
基本的にこの開発ワークスペース単位でGitHubやGitLabに連携します
それでは「開発ワークスペースを作成」をクリック
ワークスペースIDに「quickstart-workspace」と入力してクリック!
quickstart-workspaceというワークスペースが作成されていることを確認し、クリック
すると以下のような画面に遷移します。
ワークスペースを初期化をクリック
初期化すると以下のように構成ファイルなどが作成されます
ビューを作成
definitionsフォルダーの右側の「⋮」をクリックし
ファイルを作成をクリック
ファイルパスを次のように追記します
「definitions/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
これでViewの作成ができるようになりました。
Tableの作成
definitionsフォルダーの右側の「⋮」をクリックし
ファイルを作成をクリック
ファイルパスを次のように追記します
「definitions/quickstart-table.sqlx」
作成した「definitions/quickstart-table.sqlx」を開いて
以下のコードをコピペします
config {
type: "table"
}
SELECT
fruit,
SUM(count) as count
FROM ${ref("quickstart-source")}
GROUP BY 1
Dataform に BigQuery へのアクセス権を付与する
Dataform Service Accountに次のようなアクセス権を付与しておく
IAMの画面からアクセス権を付与することが可能です
・BigQuery編集者
・BigQuery データ閲覧者
・BigQuery ジョブユーザー
Workflowを実行する
Dataformの画面に戻って、「実行を開始」をクリック
ALL ACTIONSを選択して実行スタート
ExecutionsをクリックするとJOBのステータスを確認できます
開始時間の箇所をクリックすると、Dataformのdefinitionsの中で定義されているそれぞれnosqlxファイルを確認できます。
BigQueryのデータセットにDataformで定義していたViewやTableが作成されていることが確認できます。
Discussion