uni farm

dataform on GCP 実行環境構築

dataform on GCP 実行環境構築

dataform を触ってみたのでメモ。基本的にローカルでの動作確認や github actions での CI なんかについてかいておく

概要

dataform は GCP のマネージドサービスであり、データパイプラインの構築、テスト、ドキュメント化、監視を行うことができる。元々 OSS であったが、2020/12 に買収され、google cloud に組み込まれた

  • pricing

dataform は無料で使うことができる。ただしbigquery のクエリコストや、スケジュール実行したい場合 cloud scheduler を使うなど他サービスを使う部分の料金は別途計算される

dataform-system

ref. https://cloud.google.com/blog/ja/products/data-analytics/welcoming-dataform-to-bigquery

導入

GCP 向け

以下記事の手順でやっておけばよい

https://zenn.dev/cloud_ace/articles/2636f231f79c2e

ワークスペースの初期化と github リポジトリの接続を行う

dataform-init

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)をリポジトリに登録。これの復号パスワードをリポジトリの secret に登録することで、github actions 上で複合し、用いる

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()} という変数で取得できる
  • 作成場所(dataset)はどうやって指定する?
    • config 中で schema を指定すると dataset なんかを変更できる
  • テーブル名に prefix とかつけられる?

参考

公式

dbt との比較が詳細

example あんま例示されていないが

2024, Built with Gatsby. This site uses Google Analytics.