📑

run_queryを使った高度な動的クエリ生成

2021/12/16に公開

例えばこんなシチュエーション

  • 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案件の先日依頼した内容間違えてました!」

実際にどうやればよいの?

  1. アンケートのデータは手動もしくは何らかのELツールでまずテーブルデータにする
  2. Googleスプレッドシートでアンケート毎のデータ定義を入力する
  3. 上記のスプレッドシートをエクスターナルテーブルとして登録する
  4. モデルから3のデータを抽出して、結合するクエリを作成する

スプレッドシートでの管理イメージ

  • Googleフォームのアンケートデータはスプレッドシートに書き出されるが、データ構造が縦軸がユーザー単位、横軸に質問単位というクロスになるので、横持ちのデータになっている
  • そのため案件毎に格納されるカラムの位置が異なったりする

エクスターナルテーブルの設定

ググってみて下さい

モデルで処理してみる

END

Discussion