📑
run_queryを使った高度な動的クエリ生成
例えばこんなシチュエーション
- Googleのアンケートフォームで製品の評価をモニタリングしている
- アンケートの構造は抽象化出来ているが、アンケートごとに解答データの構造(カラム)が異なる
- 全アンケートデータのRAWデータを作成するためにはカラムの差異に気をつけてunion allとかしなければならない
- めんどくさい、管理も大変
それrun_queryで解決できます
run_queryでSQLを実行できます
- run_queryはモデル内でSQLを実行し、実行結果をjinjaの変数として代入&処理ができるようになります
https://docs.getdbt.com/reference/dbt-jinja-functions/run_query
SQL実行とjinjaができるメリット
- SQLを組む上でのデータの定義をモデル内から排除できる
- 例えばスプレッドシートで管理し、エクスターナルテーブルでテーブル化したものを参照するとか出来る
- jinjaではデータ変換とかはBigQueryに任せSQLを組むロジックに専念できる
- jinjaはテンプレートエンジンに紐付いたものなので、高度な処理は難しい
- 日付処理、文字列変換、数値計算等
依頼から開放されましょう
👱🏻♂️「XX案件の設定を願いします!明日までに!」
👩🏻「YY案件の設定を願いします!量が多くてすみません!」
🙇🏻♂️「ZZ案件の先日依頼した内容間違えてました!」
実際にどうやればよいの?
- アンケートのデータは手動もしくは何らかのELツールでまずテーブルデータにする
- Googleスプレッドシートでアンケート毎のデータ定義を入力する
- 上記のスプレッドシートをエクスターナルテーブルとして登録する
- モデルから3のデータを抽出して、結合するクエリを作成する
スプレッドシートでの管理イメージ
- Googleフォームのアンケートデータはスプレッドシートに書き出されるが、データ構造が縦軸がユーザー単位、横軸に質問単位というクロスになるので、横持ちのデータになっている
- そのため案件毎に格納されるカラムの位置が異なったりする
エクスターナルテーブルの設定
ググってみて下さい
Discussion