🐕

DataformとGithub連携やってみる

2023/09/17に公開

はじめに

これまでdbtしか触ってこなかった私が業務でDataformを使いそうなので、勉強目的のアウトプットです。

この記事の主題:DataformとGithubの連携

DataformにはGithubのリポジトリとの連携が可能なので、どのように設定するかを確認してみました。

今回検証する連携までの流れを紹介します。

  1. Githubにてリポジトリを作成する
  2. 作成したリポジトリにDataform用のモデルを作る(モデルはJaffle-Shopを利用)
  3. GithubにてPersonal access tokens (classic)を払い出す
  4. Google CloudのSecrete Managerに手順2で払い出したTokenをシークレットとして作成
  5. Dataformのデフォルトサービスアカウントにシークレットへのアクセス権を付与
  6. Dataformのリポジトリ画面より、Githubとの接続を行う
  7. Dataformのリポジトリから開発ワークフローを作成し、Githubのコードが連携されていることを確認
  8. モデルの実行を試してみる
  9. Githubへバージョン管理を試してみる

少し細かいですが、ざっとこのような流れです。

0. Githubにてリポジトリを作成する

手順は不要だと思うので割愛します。
今回はプライベートリポジトリで作成しました。

1. 作成したリポジトリにDataform用のモデルを作る

1からモデルを作るのは手間なので、jaffle-shop-classicのモデルを使わせていただきました。
https://github.com/dbt-labs/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に登録するためです。

上記手順で不明点があれば以下ドキュメントを参照ください
https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens

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