2024 現在の Dataform は、Dataform 3 系の開発とttps://docs.dataform.co/
(存在しない URL)にあった Docs の移行がおこなわれている。
最近 2 系の Docs にすぐ当たれない体験が増えてきたので、備忘録として残しておくー。
今回は Dataform CLI を使って、BQ に接続するまでの手順になる。
バージョン
$ node --version v20.11.1
$ dataform --version 2.9.0
DataformCLI をインストールする
npm i -g @dataform/cli@^2.9.0
Dataform プロジェクトを初期化する
docs には、dataform init
を実行すると dataform プロジェクトを初期化できると書いてあったが、BigQuery を使った Dataform プロジェクトを初期化するためには、下記のコマンドとオプションが必要になる。今回は sandbox-dataform ディレクトリの下で実行していくことにする。
$ pwd /Users/yoshitaku/workspace/sandbox-dataform $ dataform init bigquery <YOUR_DIRECTORY> --default-database <YOUR_BIGWUERY_PROJECT> --default-location <YOUR_BQ_LOCATION>
コマンドが成功すると、下記のディレクトリとファイルが作成される。
Writing project files... Directories successfully created: /Users/yoshitaku/workspace/sandbox-dataform/dataform /Users/yoshitaku/workspace/sandbox-dataform/dataform/definitions /Users/yoshitaku/workspace/sandbox-dataform/dataform/includes Files successfully written: /Users/yoshitaku/workspace/sandbox-dataform/dataform/dataform.json /Users/yoshitaku/workspace/sandbox-dataform/dataform/package.json /Users/yoshitaku/workspace/sandbox-dataform/dataform/.gitignore NPM packages successfully installed.
また、@dataform/core もインストールされている。
$ cat dataform/package.json { "dependencies": { "@dataform/core": "2.9.0" } }
クレデンシャルファイルの生成
dataform init-creds
コマンドを実行すると、実行環境へ接続するためのクレデンシャルファイルを生成することができる。
しかしここでも、このコマンドのままでは実行できず、末尾に bigquery を付ける必要があるdataform init-creds bigquery
実行すると対話式で必要情報を入力していく。聞かれることは下記の 2 つになる。
- 接続する BigQuery が存在している location(おそらく asia-northeast1 を選択することが多い)
- Google Cloud のプロジェクト ID
無事に完了すると Dataform CLI から、BigQuery に接続する準備ができたことになる。
サンプルファイルの作成と実行
次のコマンドを実行し、サンプルの SQL を作成する。なお、このコマンドは Dataform の公式 Docs に載っていたコマンドになる。
echo "config { type: 'view' } SELECT 1 AS test" > definitions/example.sqlx
dataform には dry-run のコマンドがあるので実行する。 無事に設定が完了しているとコンパイルが実行され、プレビュー実行される。
$ dataform run --dry-run Compiling... Compiled successfully. Dry run (--dry-run) mode is turned on; not running the following actions against your warehouse: 1 dataset(s): dataform.example [table]
ちなみに、生成したクレデンシャルファイルを適当なディレクトリへ移動させると dry-run は失敗する。
$ dataform run --dry-run Compiling... Compiled successfully. Dataform encountered an error: Missing credentials JSON file; not found at path '/Users/yoshitaku/workspace/sandbox-dataform/dataform/.df-credentials.json'