Google Cloud 上で動作する ELT の T (Tranform) を担当するソフトウェアです。ELT については、 ETL/ELT とは で解説していますが、簡単にまとめるとデータをデータウェアハウスなどから抽出 (Extract) 、ロード (Load)、変換 (Transform) する3つの処理をまとめたものです。
DataForm は、データウェアハウスなどから読み込んだデータを様々な目的のために加工し、データウェアハウスに書き戻すツールです。
また、Google Cloud 上で動作するため、BigQuery などの Google Cloud のサービスとの連携が容易となっています。
元は英国のスタートアップ DataForm が開発していたもので、2020 年に Google に買収され、Google Cloud のサービスとして提供されるようになりました。
DataForm は、以下のような特徴を持っています。
- SQL でデータの加工を定義する。
- JavaScript を使って、SQL 以外の処理の定義、処理のモジュール化ができる。
- NULL、重複データの他にも、独自に定義したロジックでのテストができる。
- Git, CI/ CD などのソフトウェア開発手法が活用できる。
- 追加料金なし。変換処理は BigQuery で実行されるため、BigQuery の料金がかかるが、DataForm 自体の利用料金はかからない。
DataForm は Google Cloud の BigQuery に統合されたサービスとなっています。そのため、まずは Google Cloud でプロジェクトを作成し、BigQuery ならびに DataForm を有効化する必要があります。
その後、DataForm プロジェクトを Google Cloud のコンソール画面上または DataForm CLI で作成し変換処理の作成、テスト、実行を行っていきます。
以下では DataForm CLI を使った DataForm プロジェクトの作成方法を紹介します。
OSS のコマンドラインインターフェース (CLI) である DataForm CLI は npm でインストールできます。
事前に npm がインストールされていることを確認してください。
npm のインストールについては、以下の記事を参考にしてください。
npm がインストールされている環境で、以下のコマンドを実行して DataForm CLI をインストールします。
BigQuery にデータを用意
DataForm は BigQuery に対してデータの読み込み、書き込みを行います。そのため、まずは BigQuery にデータを用意する必要があります。
以下の記事を参考にして、BigQuery にデータを用意してください。
まずはテストデータを用意します。こちらの記事にある以下の csv ファイルをローカルにダウンロードしてください。
raw_customers.csv
raw_orders.csv
raw_payments.csv
そして BigQuery で "sample_dataform" と名付けたデータセットを用意し、3 つの csv インポートしてテーブルを作成します。

ここから、BigQuery の "sample_dataform" データセットにある各テーブルを DataForm によって加工していきます。
DataForm CLI を使って DataForm プロジェクトを作成します。
プロジェクトディレクトリで以下のコマンドを実行してプロジェクトを新規作成します。
{project_id}
には BigQuery のプロジェクト ID、{region_name}
には BigQuery のリージョン名を指定してください。
例えば、プロジェクト ID が my-project
でリージョン名が asia-northeast1
の場合は以下のようになります。
DataForm CLI の品質向上のため、匿名の使用状況データを送信するかどうかを次のように尋ねられます。必要に応じて回答してください。
以下のようなメッセージが表示されれば、プロジェクトの新規作成は完了です。
CLI から BigQuery に接続するための認証情報を設定します。以下のコマンドを実行してください。
この後は init-creds
ウィザードに従って認証情報の設定を行ってください。
ウィザードで聞かれる項目は以下の通りです。
- データウェアハウスのロケーション
- 認証方式(ADC、またはサービスアカウントキー) サービスアカウントキーの場合は、サービスアカウントキーの JSON ファイルのパスを聞かれます。
- プロジェクト ID
全ての選択が完了すると、BigQuery プロジェクトへの接続テストが行われます。
ここでプロジェクトディレクトリに作成される .df-credentials.json
は、BigQuery への接続情報を保持するファイルです。
DataForm のワークフローを実行するのに必要なロールは以下のとおりです。
- BigQuery データ編集者
- BigQuery データ閲覧者
- BigQuery ジョブユーザー
- BigQuery データオーナー
詳しくは、以下の公式ドキュメントを参照してください。
Dataform サービス アカウントに必要なロール | Google Cloud
また、作成された .df-credentials.json
は .gitignore
を設定するなどして、リモートリポジトリに含めないようにしてください。
ここまでのステップで DataForm CLI によって作成されたプロジェクトディレクトリを確認してみましょう。
既に全ての DataForm プロジェクトで共通のディレクトリ構造が作成されていることが確認できます。
dataform.json
: DataForm プロジェクトの設定ファイル
deninitions
: データ加工の定義ファイル (*.sqlx
など) を格納するディレクトリ
includes
: リポジトリ全体で再利用可能なスクリプトと変数を格納するディレクトリ
package.json
: DataForm プロジェクトの依存関係を管理するためのファイル
- (
node_modules
) : DataForm CLI によってインストールされたパッケージが格納されるディレクトリ。 Google Cloud のコンソール画面上から作成した場合は存在しません。
データ加工/変換を定義する
definitions
ディレクトリ配下にデータ加工を定義する SQLX ファイルを作成します。
事前に BigQuery に用意した raw_customers.csv
, raw_orders.csv
, raw_payments.csv
から customers
テーブルを作成するための SQLX ファイルを作成します。
/definitions/raw_customers.sqlx
/definitions/raw_orders.sqlx
/definitions/raw_payments.sqlx
/definitions/customers.sqlx
以上で、raw_customers.csv
, raw_orders.csv
, raw_payments.csv
から customers
テーブルを作成するための SQLX ファイルを作成しました。
DataForm の Google Cloud コンソール画面から以上のワークフローを作成する場合、コンパイル済みのワークフローを有向非巡回グラフ (DAG) として確認することができます。
今回作成したワークフローは以下のような DAG となります。

実際に DataForm CLI を使って変換ワークフローを実行するには、以下のコマンドを実行します。
変換フローが正常に実行されると、BigQuery の sample_dataform
データセットに以下のように customers
テーブルが作成されます。

主要コマンド
これまでで、DataForm プロジェクトの作成、データ加工の定義、 DataForm CLI からワークフローを実行する方法を紹介しました。
DataForm CLI には他にも以下のような主要なコマンドがあります。
dataform compile
: 変換ワークフローのコンパイルを行う。テーブルの依存関係などをチェックする。
dataform test
: 変換ワークフローのコンパイルとテストを行う。テストが定義されている場合はテストも実行される。
dataform install
: DataForm CLI プロジェクトをリモートリポジトリなどから取得した場合に、依存関係 (NPM) のインストールを行う。
その他のコマンドと使い方については、以下の公式ドキュメントを参照してください。
DataForm CLI リファレンス | Google Cloud
まとめ
DataForm は Google Cloud 上で動作する ELT の T (Tranform) を担当するソフトウェアです。データウェアハウスなどから読み込んだデータを様々な目的のために加工し、データウェアハウスに書き戻しを担います。
本記事では、DataForm CLI を使って DataForm プロジェクトの作成、データ加工の定義、 DataForm CLI からワークフローを実行する方法を紹介しました。
以降の記事では、DataForm で変換ワークフローを定義するための SQLX ファイルの書き方について解説します。
参考

備考
Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。
