Dataformのregion設定でハマったこと(2023/5)
DataformとGoogle BQを連携する際のregion設定でハマったので解決策をシェアです。
ハマった点
Dataformのリポジトリ作成でMulti-regionsを設定できないため、googleBQとDataformの連携に苦労してしまった。
googleBQのmulti-regionsは以下の通り。詳細はこちら。
BigQuery には次の 2 種類のデータとコンピューティング ロケーションがあります。
リージョンは、ロンドンなどの特定の地理的な場所となります。
マルチリージョンは、米国などの複数のリージョンを含む広い地理的なエリアとなります。マルチリージョン ロケーションは、シングル リージョンよりも大きい割り当てを提供できます。
解決策・結論
Dataformのリポジトリ作成時にus-central1
,us-east1
,us-west1
のいずれかを作成しinitializeすると、dataform.json
のdefaultLocationがUSで設定される。
{
"defaultSchema": "dataform",
"assertionSchema": "dataform_assertions",
"warehouse": "bigquery",
"defaultDatabase": "confident-truth-370200",
"defaultLocation": "US"
}
dataform.json
のdefaultLocationとgoogleBQのデータセットのロケーションが一致していれば、googleBQのテーブルからデータを読み込むことができる。
上のjsonファイルの場合だと、defaultLocationがUSなので、googleBQのmulti-regionsのUSと対応している。(公式ドキュメントに記載されていたわけではなく、コードの挙動からそのように推測している。)
Dataformのレポジトリを作成した際のロケーションは関係ない。
極端な例だと、以下の設定でもBQからデータを取り込むことができる。
- レポジトリ作成時のロケーション ... US
- dataform.jsonのdefaultLocation ... asia-northeast1
- BQのデータセットのロケーション ... asia-northeast1
BQの2つのロケーションからDataformに取り込むことは、2023年5月時点では難しい。(ソース)
Discussion