よしたく blog

ほぼ週刊で記事を書いています

DataformCLIの2系を使ってBQに接続するまでの手順

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'