LoginSignup
13
5

Dataformって何?便利そうだし調べてみた!(前編)

Last updated at Posted at 2023-07-24

はじめに

こんにちは、京セラコミュニケーションシステム 西田(@kccs_hiromi-nishida)です。

最近ストアドプロシージャを作成し、それをCloud Functionsからキックして、Cloud Functions自体はCloud Composerでジョブ制御する、という要件がある案件を少し手伝いました。

もう少しスマートに出来ないものかなぁと思っていたところ、上司からBigQueryならこんなプロダクトあるよ!と紹介されたのが、Dataformです。

ちょっと調べてみるとなかなか便利そう!
前編では概要の紹介と使用するまでの準備、中編では実際にDataformを使ってみる、後編ではワークフローのテストや定期実行をしてみる、という3部構成の記事にする予定です。

本記事は2023年7月ごろに作成しております。よって、引用している文章などはこの時点での最新となります。ご了承ください。

連載記事一覧

Dataformって何?便利そうだし調べてみた!(前編) ★本記事★
Dataformって何?便利そうだし調べてみた!(中編)
Dataformって何?便利そうだし調べてみた!(後編)

この記事の対象者

  • Dataformって何それ?と思っている方
  • Dataformを使ってみたいなと思っている方

そもそもDataformって何?

公式ドキュメントの冒頭には以下のように記載されています。

データアナリストがBigQueryでデータ変換を行う複雑なSQLワークフローを開発、テスト、バージョン管理、スケジュール設定するためのサービスです。
Dataformを使用すると、データ統合のELT(抽出、読み込み、変換)プロセスにおけるデータ変換を管理できます。
--Dataform の概要 より抜粋

主な特徴は以下の通りです。

  • SQLXというSQLに似た言語でテーブルの定義や集計処理等のロジックを記述できる

  • JavaScriptをSQLXファイル内で使用できる(処理の共通化や繰り返し処理、変数定義等)

  • SQLXファイル内に検証ロジックを記述することで検証処理が実行できる

  • BigQueryのコンソールから依存関係の可視化やエラー取得、Gitによるコードのバージョン管理が行える

  • データウェアハウスとして、Snowflake、Google BigQuery、Amazon Redshift、Azure SQL Data Warehouse、Postgresをサポート

2023年5月にGAとなった比較的新しいサービスとなります。
無料で使うことができる1のも嬉しいポイントですね。

従来のデータ変換

BigQueryにとりあえず色々なデータを集めてきて、さぁ可視化や分析をしたい!と思った場合、最終的に利用したいデータ形式に合わせてさまざまなデータマートを作成していくと思います。

単純な場合はいいのですが、たとえば以下のようにTable_Gの前にTable_CとFが集計されている必要があり、Table_Cの前にTable_BとEが集計されている必要があって・・(続く)というような依存関係のあるマートの場合があったとします。
この場合、依存関係を管理するためにGoogleのプロダクトだとCloud Composer2やWorkflows3等のサービスを使うことがあったのではないでしょうか。
mart
これらはもちろん素晴らしいプロダクトなのですが、DAGの記述方法(pythonで書かないといけない)を覚えたり、プログラムが複雑になったりなど、気軽に使ってみるにはちょっと難しく敷居が高いかな?という印象です。(個人的に)

ちなみにDAGのサンプルが公式ドキュメントにありますので、見てみてください。
結構複雑だなぁという印象を持たれる方、多いのではないでしょうか。

Dataformを使うとどうなるんだろう?

Dataformで依存関係を定義しようとした場合、使われるのがSQLXというSQLの拡張言語です。
公式ドキュメントのサンプルを見て頂ければわかるのですが、SQLを書いたことがあれば、ほぼ内容を理解できるのではないかと思います。

サンプルコードに、ref('order_stats')という記述があります。
このref関数を使うことで自動的にテーブルの依存関係が追加されます。
つまり、今回のサンプルだとorder_stats <- サンプルで作成されるテーブルという依存関係が自動で定義され、DAGが作成されます。

中編ではこの依存関係の定義などもより詳しく説明する予定です!

サンプル(公式ドキュメントより転載)
config { type: "table" }
SELECT
  customers.id AS id,
  customers.first_name AS first_name,
  customers.last_name AS last_name,
  customers.email AS email,
  customers.country AS country,
  COUNT(orders.id) AS order_count,
  SUM(orders.amount) AS total_spent
FROM
  dataform-samples.dataform_sample.crm_customers AS customers
  LEFT JOIN ${ref('order_stats')} orders
    ON customers.id = orders.customer_id

WHERE
  customers.id IS NOT NULL
  AND customers.first_name <> 'Internal account'
  AND country IN ('UK', 'US', 'FR', 'ES', 'NG', 'JP')

GROUP BY 1, 2, 3, 4, 5

--テーブルの構造と依存関係を定義する より転載

使うための準備をしよう

では、中編に向けてまずはDataformを使うための準備をしたいと思います。

APIの有効化

ハンバーガーメニューを開き、BigQuery → Dataformを選択します。

Dataform

Google Cloud メニュー画面

表示された画面で、有効にする を選択すればOKです。

Dataform

Dataform API有効化画面

必要なロール

Googleアカウントに以下のロールを付与してください。

ロール名 ロールID 説明
Dataform 管理者 roles/dataform.admin すべての Dataform リソースに対する完全アクセス権
Dataform 編集者 roles/dataform.editor ワークスペースに対する編集アクセス権とリポジトリに対する読み取り専用アクセス権

リポジトリの作成

※この章で使用している画像はすべてDataform画面をキャプチャしたものとなります

Dataformでワークフローを開発するときにまず作成するのがリポジトリです。
BigQueryメニューからDataformを選択し、リポジトリ作成 を選択してください。

Dataform

リポジトリIDを入力、リージョンを選択して 作成 を選択してください。
Dataform

リポジトリを作成すると、自動的にDataform用のサービスアカウントが作成されます。
画面に記載されているとおり、BigQueryのワークフローを実行するためにはロールが必要なので、後ほどこの自動作成されたサービスカウントにロールを付与します。

※サービスアカウントIDをコピーしておくとロール付与の際に便利です!

完了 を選択し、リポジトリの作成はこれで完了です。

Dataform

BigQueryへのアクセス権を付与

リポジトリを作成すると自動作成されるサービスアカウントに対し、BigQueryへのアクセス権を付与します。
以下の公式ドキュメントに付与するロールが記載されているのでその通り付与します。

IAMと管理→IAMを選択し、アクセス権を付与 を選択します。

IAM

IAMと管理画面

新しいプリンシパルに、自動作成されたDataformのサービスアカウントIDを入力します。
※前の章でサービスアカウントIDをコピーしておくと、ここで貼り付けできて便利です。

ロールは公式ドキュメント記載通り3つ追加し、最後に 保存 を選択して付与は完了です。

IAM

IAMと管理 アクセス権付与画面

開発ワークスペースの作成

開発ワークスペースとは、Gitでいうとブランチのような位置づけです。

共同開発の場合、開発者がそれぞれGitでブランチを切って開発しますが、それと同じようにDataformではワークスペースを開発者がそれぞれ作成することで作業スペースを分けることができ、他のメンバーに影響を与えることなく変更内容をリポジトリにcommit/pushできるようになります。

前の章で作成したリポジトリにはまだワークスペースがないので、ここでワークスペースを作成します。

※この章で使用している画像はすべてDataform画面をキャプチャしたものとなります

BigQuery→Dataformと選択し、作成したリポジトリを選択します。

Dataform

開発ワークスペースを作成 を選択します。
Dataform
ワークスペースIDを入力し、作成 を選択します。
Dataform
ワークスペースが作成されました!
Dataform
作成したワークスペースIDを選択して、ワークスペースの初期化を行います。
ワークスペースを初期化 を選択してください。

Dataform

しばらくすると初期化が完了し、最初のViewを作成するためのSQLXファイルが表示されます。

Dataform

これで準備は完了です!

次回予告

前編ではDataformの概要の説明、使用するまでの準備についての内容をお届けしました。
中編では以下のような内容を紹介する記事を作成する予定ですので、お楽しみに。

  • テーブルを作成してみよう
  • 作成したテーブル同士で依存関係を作成してみよう

※記事作成中に変更になる可能性はあります。ご了承ください!

  1. Dataformの利用自体は無料ですが、BigQueryでのクエリ実行や他のサービスを連携して利用する場合、利用したリソースに対する課金は発生します。

  2. Cloud Composer の概要 -- 公式ドキュメント

  3. ワークフローの概要 -- 公式ドキュメント

13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5