🤖

Dataformを使ってみた (BigQuery)

2023/06/13に公開

Dataformとは?

DataformとはBigQueryに完全に統合されたツールで、BigQuery上でデータ加工(ELT)ができるツールです

Dataformの特徴

・SQLXという言語でクエリ文を定義
・タスクの依存関係などを定義して、データパイプラインを作成することができる (スケジューリングもできるようになりました!)

以下のような依存関係を作ることができます

SQLXとは?何がいいの?

SQLは使っているけど、SQLXって聞いたことない。。。そんな人も多いのではないでしょうか。
SQLXとは何かというと、SQLの拡張言語のことで、おそらくSQL extensionの略なんじゃないかと思っています。

実はSQLだと次のような課題が出てきます。

・再利用性が低い(関数やメソッドを作成し、それを異なるスクリプトで簡単に再利用することが難しい)
・コード管理やバージョン管理がしにくい
・データの整合性を確かめるテストができない
・SQL文の説明であったり、Readme的なものは別途システムを用意しないといけない
・SQLのタスクの依存関係を作るのが難しい

この辺りを実装しようとすると、UDFやスケジュールドクエリやworkflowsなどを活用して組み立てる必要がありました。。。
しかし!!!この辺りの課題をSQLXでは解決してくれる言語になっています。

SQLXについての公式ガイドはこちら
https://docs.dataform.co/guides/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