dataform を触ってみたのでメモ。基本的にローカルでの動作確認や github actions での CI なんかについてかいておく
概要
dataform は GCP のマネージドサービスであり、データパイプラインの構築、テスト、ドキュメント化、監視を行うことができる。元々 OSS であったが、2020/12 に買収され、google cloud に組み 込まれた
- pricing
dataform は無料で使うことができる。ただしbigquery のクエリコストや、スケジュール実行したい場合 cloud scheduler を使うなど他サービスを使う部分の料金は別途計算される
ref. https://cloud.google.com/blog/ja/products/data-analytics/welcoming-dataform-to-bigquery
導入
GCP 向け
以下記事の手順でやっておけばよい
https://zenn.dev/cloud_ace/articles/2636f231f79c2e
ワークスペースの初期化と github リポジトリの接続を行う
local 向け
- 環境
- nodejs: 18.x
- dataform: 2.4.x
local で動作させる事もできる
- セットアップ
- リポジトリのクローン
GCP console 上で リポジトリ を作った場合 package.json や example の sqlx が追加された状態なはず
gh repo clone mygithub/dataform-repo
cd dataform-repo
npm i -g @dataform/cli
- dataform cli のインストール
# 認証が入る
dataform init-creds bigquery
dataform install
# warging とか opt-in とか出てくるけど気にせず適当に
...
- 実行
dataform run --dry-run
- エディタ
vscode に公式の plugin がある。シンタックスハイライトされる。更新されてないので、これ以上便利にはならなそうだが…
CI with github actions
test・lint・dry-run
github actions にて行う
name: CI
on:
push:
paths:
- definitions/**
- .github/workflows/ci.yaml
permissions:
contents: read
jobs:
dry-run:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout code into workspace directory
uses: actions/checkout@v3
- name: Install project dependencies
uses: docker://dataformco/dataform:latest
with:
args: install --track false
- name: Run dataform compile
uses: docker://dataformco/dataform:latest
with:
args: compile --track false
- name: Decrypt credentials for dataform
run: gpg --quiet --batch --yes --decrypt --passphrase="$CREDENTIALS_GPG_PASSPHRASE" --output .df-credentials.json .df-credentials.json.gpg
env:
CREDENTIALS_GPG_PASSPHRASE: ${{ secrets.CREDENTIALS_GPG_PASSPHRASE }}
- name: Dry run
uses: docker://dataformco/dataform:latest
with:
args: run --dry-run --track false
--track false
最近はいったオプションらしい
https://github.com/dataform-co/dataform/releases/tag/2.4.1
—dry-run を外すなどすると実行もできる。UDFやviewを作るときなどはこちらの実行環境で問題なさそうである
secret の登録
Decrypt のあたりの設定方法。公式通りにやった
以下権限をもつサービスアカウントを作成し、
JSON Key
roles/bigquery.jobUser
roles/bigquery.dataEditor
roles/bigquery.dataViewer
dataform init-creds bigquery
JSON Key
.df-credentials.json
{
"projectId": "project",
"credentials": "{xxxx}",
"location": "US"
}
暗号化されたファイル(
df-credentials.json.gpg
gpg --symmetric --cipher-algo AES256 .df-credentials.json
# input passphrase
# then create
# .df-credentials.json.gpg
# then add
# CREDENTIALS_GPG_PASSPHRASE=passphrase
# on github repository
ref. https://docs.dataform.co/guides/ci-cd
おまけ
気になった仕様メモ
- 作成されるテーブル名は?
- .sqlx のファイル名がそう という変数で取得できる
${self()}
- .sqlx のファイル名がそう
- 作成場所(dataset)はどうやって指定する?
- config 中で schema を指定すると dataset なんかを変更できる
- テーブル名に prefix とかつけられる?
- 実行時に prefix suffix がつけられるらしい
- https://cloud.google.com/dataform/docs/reference/dataform-core-reference#iprojectconfig
参考
公式
- https://cloud.google.com/blog/ja/products/data-analytics/welcoming-dataform-to-bigquery
- https://cloud.google.com/dataform?hl=ja
dbt との比較が詳細
- https://lab.mo-t.com/blog/dbt-vs-dataform
- https://zenn.dev/moneyforward/articles/10c9f8c20243ca03fd31
- https://cam-inc.co.jp/p/techblog/600507634579145665
example あんま例示されていないが