DataformとGithub連携やってみる
はじめに
これまでdbtしか触ってこなかった私が業務でDataformを使いそうなので、勉強目的のアウトプットです。
この記事の主題:DataformとGithubの連携
DataformにはGithubのリポジトリとの連携が可能なので、どのように設定するかを確認してみました。
今回検証する連携までの流れを紹介します。
- Githubにてリポジトリを作成する
- 作成したリポジトリにDataform用のモデルを作る(モデルはJaffle-Shopを利用)
- GithubにてPersonal access tokens (classic)を払い出す
- Google CloudのSecrete Managerに手順2で払い出したTokenをシークレットとして作成
- Dataformのデフォルトサービスアカウントにシークレットへのアクセス権を付与
- Dataformのリポジトリ画面より、Githubとの接続を行う
- Dataformのリポジトリから開発ワークフローを作成し、Githubのコードが連携されていることを確認
- モデルの実行を試してみる
- Githubへバージョン管理を試してみる
少し細かいですが、ざっとこのような流れです。
0. Githubにてリポジトリを作成する
手順は不要だと思うので割愛します。
今回はプライベートリポジトリで作成しました。
1. 作成したリポジトリにDataform用のモデルを作る
1からモデルを作るのは手間なので、jaffle-shop-classicのモデルを使わせていただきました。
Dataform専用のフォルダ構造があります。今回はjaffle-shop-classicのモデルが動けばいいので最低限のフォルダ構成とし、次の構成としました。.
├── README.md
├── definitions
│ ├── analytics
│ │ ├── customers.sqlx
│ │ └── orders.sqlx
│ └── staging
│ │ ├── customers.sqlx
│ │ └── orders.sqlx
│ ├── raw_customers.sqlx
│ ├── raw_orders.sqlx
│ └── raw_payments.sqlx
├── includes
│ └── .gitkeep
├── .gitignore
└── workflow_settings.yaml
また、dbtの記法で書かれたクエリはDataformで実行できるよう書き変えました。
2. GithubにてPersonal access tokens (classic)を払い出す
Github画面右上のアイコンをクリックし、「Settings」へと進みます。
画面が遷移し、画面左のメニュー欄の一番下に「Developer Settings」へと進みます。
次に、以下スクショの画面にて「Generate New Token」をクリックし、「Generate New Token(Classic)」を選択します。
Nameは適当に設定し、権限は「repo」にチェックを入れます。
最後に画面最下部の「Generate Token」をクリックし、Tokenが作成されます。
そのTokenをメモしておきます。
あとでSecrete Managerに登録するためです。
上記手順で不明点があれば以下ドキュメントを参照ください
3. Google CloudのSecrete Managerに手順2で払い出したTokenをシークレットとして作成
Google Cloudのコンソール画面にて、Secrete Managerへアクセスし、「シークレットの作成」をクリックします。
画面が遷移し、以下スクショの「名前」と「シークレットの値」を設定し、画面下部までスクロールし、「シークレットを作成」をクリックします。
4. Dataformのデフォルトサービスアカウントにシークレットへのアクセス権を付与
Google Cloudのコンソール画面にて、IAM管理画面へアクセスし、Dataformのデフォルトサービスアカウントに以下のRoleを付与します。
Secret Manager のシークレット アクセサー
Roleが付与できると以下のように表示されるはずです。
5. Dataformのリポジトリ画面より、Githubとの接続を行う
Google Cloudのコンソール画面にて、Dataformへアクセスし作成しておいたリポジトリへアクセスします。
リポジトリ画面遷移後、「SETTINGS」タブをクリックし、以下スクショは少し違いますが、「Gitと接続」ボタンが表示されます。
※以下スクショはすでにGitとの接続を済ませているため、「Git接続を編集」と表示されています。
Gitとの接続において、適宜項目を埋めて設定を行います。
設定後の画面は以下の通りです。
6. Dataformのリポジトリから開発ワークフローを作成し、Githubのコードが連携されていることを確認
さて、この状態で開発ワークフローを作成してみましょう。
問題なく接獄できれば、開発ワークフローの初期化はボタンは表示されず、ワークフロー画面にはGitで管理しているファイルが存在するはずです。
7. モデルの実行を試してみる
試しにStagingのViewモデルだけを実行してみます。
実行ログを確認してみると、無事ステータスが「成功」となっていました。
BigQueryの画面でもViewモデルが作成されていました。
8. Githubへバージョン管理を試してみる
Dataform上で開発したモデルをGithubでバージョン管理をしてみました。
試しに、stg_payments.sqlxのファイルを以下のように修正してみました。
config { type: "view" }
WITH
SOURCE AS (
SELECT
*
FROM
${ref("raw_payments")}),
renamed AS (
SELECT
id AS payment_id,
order_id,
payment_method,
-- `amount` is currently stored in cents, so we convert it to dollars
-- amount / 100 AS amount // コメントアウトし
amount / 10 AS amount // amountを割る値を100 -> 10に変更
FROM
SOURCE )
SELECT
*
FROM
renamed
すると、以下スクショのように「1権の変更をCOMMIT」と表示されますので、クリックします。
画面が遷移し、commitメッセージやコードの差分などが表示されます。
問題なければ、画面下部のCOMMITボタンをクリックします。
すると、「↑PUSH TO REMOTE BRANCH」の文字に変わり、右の3点をクリックすると、push先を選択します。
あとは、pushしてレビューしてもらい、マージされればまたPullしてコードの状態を最新にするいつものフローで良いかと思います。
終わり
DataformとGithubとの連携から開発まで軽く触ってみました。
ほぼdbtと共通する箇所も多々あり、すんなり学習することができました。
次回は、Dataformの機能に触れていきたいと思います。
Discussion