Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

dbtではじめる クエリの再利用と正確性の向上について

ymy
August 18, 2023

dbtではじめる クエリの再利用と正確性の向上について

ymy

August 18, 2023
Tweet

More Decks by ymy

Other Decks in Programming

Transcript

  1. 自己紹介
 3
 X : @yamayafumiteru 山家 史照 / yamaya fumiteru


    
 • 2020/07 ~ ファインディ株式会社 入社。2000年生まれ 
 • 転職事業部カスタマーサクセスを経て、2022/05からエンジニア・ア ナリストへ転向。
 • 機械学習モデルの作成や、データマートの整備、分析に従事。 データに関係することを幅広く色々やってます。 
 • LT初めてです。温かい目で見守ってください。 

  2. 4
 今回話すこと、話さないこと
 • 話すこと
 ◦ dbtの運用について
 ◦ dbt導入に至った理由
 
 •

    話さないこと
 ◦ dbtの構築の話
 ◦ 好きなコーヒー豆の産地とお笑い芸人について 

  3. 9
 AさんとBさんがデータを出していました。
 SELECT count(distinct user_id) FROM access_log WHERE access_at >=

    2023-08-01 SELECT count(distinct user_id) FROM access_log WHERE access_at > 2023-08-01
  4. 10
 AさんとBさんがデータを出していました。
 SELECT count(distinct user_id) FROM access_log WHERE access_at >=

    2023-08-01 SELECT count(distinct user_id) FROM access_log WHERE access_at > 2023-08-01
  5. 13
 自社ユーザーを除外するクエリを複数書いている
 例)売上分析するクエリ
 SELECT
 SUM(order_total) AS total
 FROM
 orders
 WHERE


    -- 自社のユーザーを除外する
 user_id NOT IN (1, 2, 13, 15)
 例)アイテムごとの売上額
 SELECT
 product_id,
 SUM(order_quantity) AS total
 FROM
 order_items
 WHERE
 -- 自社のユーザーを除外する
 user_id NOT IN (1, 2, 13, 15)
 GROUP BY
 product_id

  6. 14
 自社ユーザーを除外するクエリを複数書いている
 
例)売上分析するクエリ
 SELECT
 SUM(order_total) AS total
 FROM
 orders
 WHERE


    -- 自社のユーザーを除外する
 user_id NOT IN (1, 2, 13, 15)
 例)アイテムごとの売上額
 SELECT
 product_id,
 SUM(order_quantity) AS total
 FROM
 order_items
 WHERE
 -- 自社のユーザーを除外する
 user_id NOT IN (1, 2, 13, 15)
 GROUP BY
 product_id

  7. 20
 ざっくりと理解するdbt
 • dbt のmaterializationsは4種類あり、それぞれ以下の通りです。
 ◦ view...ビューとして作成されます。何も指定しない場合、デフォルトでviewが指定されま す。
 ◦ table...テーブルとして作成されます。

    モデルはテーブルとして再構築されます。実行ご とにcreate table します。
 ◦ incremental...テーブルとして作成されます。テーブルにレコードを挿入または更新でき ます。
 ◦ ephemeral...モデルは SQL 文の CTE(共通テーブル式) に変換されます。データウェア ハウス上では構築されません。 
 参考)https://docs.getdbt.com/docs/build/materializations
  8. 34
 複数人で使用している処理を共通化できるようになった
 
例)売上分析するクエリ
 SELECT
 SUM(order_total) AS total
 FROM
 orders
 WHERE


    -- 自社のユーザーを除外する
 user_id NOT IN (1, 2, 13, 15)
 例)アイテムごとの売上額
 SELECT
 product_id,
 SUM(order_quantity) AS total
 FROM
 order_items
 WHERE
 -- 自社のユーザーを除外する
 user_id NOT IN (1, 2, 13, 15)
 GROUP BY
 product_id

  9. 35
 ざっくりと理解するdbt
 • dbt のmaterializationsは4種類あり、それぞれ以下の通りです。
 ◦ view...ビューとして作成されます。何も指定しない場合、デフォルトでviewが指定されま す。
 ◦ table...テーブルとして作成されます。

    モデルはテーブルとして再構築されます。実行ご とにcreate table します。
 ◦ incremental...テーブルとして作成されます。テーブルにレコードを挿入または更新でき ます。
 ◦ ephemeral...モデルは SQL 文の CTE(共通テーブル式) に変換されます。データウェア ハウス上では構築されません。 
 参考)https://docs.getdbt.com/docs/build/materializations
  10. 42
 導入してよかったこと
 • GitHubを使って複数人で管理できるようになった 
 • 複数人で使用している処理を共通化できるようになった 
 • コミットする人が増えた

    
 • testによるデータ品質向上 
 • クエリを共通化して複数人で使用できるように 
 ◦ 機械学習で使用するデータの前処理、事業で使用するKPIの抽出。 
 • GitHub Actionsでjobを実行しているので、変更履歴を追える 
 • schemaで定義することでdescriptionで説明を追加できる。 
 ◦ descriptionを追加することができるので、今後LLM等で使用できる。 
 • docsを使用してテーブルが何をしているのか検索しやすい 
 ◦ 気になる方は 「dbt docs」で検索