はじめに
Dataformに関連して、GitHub Actionsを使ったデプロイフローの構築や、複数プロジェクトにまたがる開発環境と本番環境の設定を行ってみました。
この具体的な実装方法を、以下の3つの記事に分けて共有したいと思います。
- Dataformの環境構築してみた① ~ Dataformのワークスペースの作成 ~
- Dataformの環境構築してみた② ~ GitHub Actionsを使ったコンパイル ~
- Dataformの環境構築してみた③ ~ 開発環境と本番環境の構築(マルチプロジェクト) ~
Dataformの導入を検討している方や、マルチプロジェクト環境での運用を考えている方の参考になれば幸いです。
作るもの
3つの記事を通して、以下に示す開発&適用&パイプライン実行の流れを実現しようと思います。
開発環境と本番環境ともに、
first_name | family_name |
---|---|
太郎 | 山田 |
というテーブルを、
full_name |
---|
山田 太郎 |
に変換するという単純な処理をサンプルとして実現します。
ワークスペース作成手順
BigQueryにテーブル作成
Dataformから参照予定のテーブルをBigQueryに作成します。
まずは、BigQueryのデータセットを作成します。
次に、以下のコマンドでCSVファイルを作成し、BigQueryにアップロードします。
echo "太郎,山田" > ~/Desktop/temp.csv
アップロード後、以下のようにテーブルが作成されていることを確認します。
Dataform レポジトリ作成
SQLワークフローなどを格納するレポジトリを、Dataformの画面から作成します。
最初のレポジトリを作成すると、ワークフロー実行時などに利用されるサービスアカウントが自動で作成されます。
Dataformによって作られるデフォルトのサービスアカウントは、service-<プロジェクトの番号>@gcp-sa-dataform.iam.gserviceaccount.com
です。
そのサービスアカウントに、以下のように権限を割り当てます。
Dataform ワークスペース作成
作成したレポジトリの詳細画面を開き、以下のようにワークスペースを作成します。
ワークスペースとは、Gitでいうとfeatureブランチのようなものです。
新しい機能を開発する際には、ワークスペースを使って開発&検証していきます。
次に、レポジトリの「Settings」でスキーマの接尾辞に「${workspaceName}」を設定します。
こうすることで、ワークフロー実行時にワークスペース名が接尾辞として追加されたデータセットが作成され、各ワークスペースの実行結果が混在しないように設定できます。
作成したワークスペースの詳細画面に移動すると表示される「ワークスペースを初期化」というボタンを押して、ワークスペースを初期化しましょう。
デフォルトでいくつかのファイルが作成されます。
Dataform ソースコード記載
ワークスペース初期化時に作成された以下のファイルは不要なので削除します。
/definitions/first_view.sqlx
/definitions/second_view.sqlx
次に、/definitions/sources.js
を作成し、データ取得元となるテーブルを定義します。
declare({
database: "Google Cloudのプロジェクト名",
schema: "dataset1",
name: "names",
})
/definitions/fullnames.sqlx
を作成し、以下のようにSQLワークフローを定義します。
config {
type: "table"
}
SELECT
CONCAT(family_name, ' ', first_name) AS fullname
FROM
${ref('names')}
動作確認
「実行を開始」から「All ACTIONS」を選択し、処理を実行します。
実行結果として、BigQueryに「fullnames」というテーブルが作成されます。