[初心者向け]DataformでViewを作ってみる
概要
Google Cloudで手軽に使えるデータパイプラインサービスのDataformではテーブル以外にもViewを作ることができます。この記事では実際にView作成を通して、DataformでどうやってViewを作成するのかや他にどういったものを作成できるのかをみていきます。
Dataformで作成できるテーブルについて
Dataformではconfigブロックでテーブル型定義
を設定することで作成するテーブルタイプを決めることができます。
記法は以下の通りです。
config { type: "TABLE_TYPE" }
TABLE_TYPE
には3つのタイプが設定可能です。
タイプ | 説明 |
---|---|
table | テーブル |
incremental | 増分更新テーブル |
view | ビュー(View)。マテリアライズドビューも可能 |
incremental
に関しては以下のリファレンスを参照ください。
今回はTABLE_TYPE
にview
を設定してViewを作成してみます。
やってみる
今回作ってみるもののイメージは以下です。
- Tableを作成します
- 作成したTableを参照するViewを作成します
とても簡単な流れです。
それではやってみましょう。
Table作成
Dataformのワークスペースを開いて
新規ファイル作成でdefinitionsフォルダ内にcreate_test_table.sqlx
という名前でファイルを作成します。
config {
type: "table",
}
SELECT
"test_taro" AS name,
"kanagawa" AS address,
JSON """{
"id": 10,
"pref":
{
"city":
[
{ "id": 1, "type": "chuorinkan" }
]
}
}""" AS json_col
Tableを作成するのでconfigブロックのtype
にはtable
を指定します。
作成したら一度ワークフローを実行してTableを作成します。
このテーブルはテスト用ですのでテストデータを設定しています。
Viewを作成
いよいよ本命のViewを作成します。
新規ファイル作成でdefinitions配下にcreate_test_view.sqlx
の名前でファイルを作成します。
Viewを作成するときはconfigブロックのtype
にview
を指定します。
また、わかりやすいように日本語の列名を設定してみました(BigQueryでは日本語列名を使用可能です)。
config {
type: "view",
}
SELECT
name AS `氏名`,
address AS `住所`,
json_col AS `JSON型列名`
FROM
${ref("create_test_table")}
ref関数
を用いてTableを参照することでDataformの依存関係を設定することができます。
${ref("create_test_table")}
上記の実装をした後に、DataformのDAGを見てみます。
思い描いた通りになりました!
ではではワークフローを実行してみます。
create_test_view.sqlxを開いた状態で実行を開始
を押下して、
操作
→create_test_view
を選択します。
実行オプションで依存関係を含める
にチェックして実行を開始を押下します。
押下したらEXECUTIONS
より実行履歴を見てみます。
ステータスが緑のチェックになっていたら実行成功です。
確認してみる
該当のTableとViewが作成されているか確認してみます。
(作成されるデータセットはdataform.jsonなどの設定によります)
まずはTableから。
問題なく作成されていますね。JSON型の列もできています。
次にViewを見てみます。
日本語で列名が設定されたViewができていますね。
試しにクエリしてみます。
問題なくデータ取得できました。検証完了です。
まとめ
まずは3行でまとめます。
- DataformでViewを作成できる
- 日本語列も設定できる(当たり前ですが)
- 依存関係を設定してViewを作成できる
View作成の前処理でELT処理を行なってViewを作成する、そんなデータパイプラインも
Dataformでは作成できることがわかります。
View作成はデータパイプラインに組み込まずとも手動で作成するということも当然ありですが、手動で作成する場合管理が漏れてしまいELT処理で修正した際の反映が漏れるというようなこともあるかもしれません(列追加や列名変更など)。
データパイプラインにView作成も組み込んでおくことでそうした漏れの発生を低減することができるかもしれません。
ワークロードによっていはデータパイプラインにView作成を盛り込むのもありなのかもな、と思います。
それではまた。ナマステー
参考