Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for ymy ymy
August 18, 2023

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

Avatar for ymy

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」で検索