Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

2
 本日の話のながれ
 
 1. 自己紹介
 2. 今回話すこと、話さないこと
 3. こういう課題ありませんか?
 4. ざっくりと理解するdbt
 5. dbtを導入した結果
 6. まとめ
 7. 告知


Slide 3

Slide 3 text

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


Slide 4

Slide 4 text

4
 今回話すこと、話さないこと
 ● 話すこと
 ○ dbtの運用について
 ○ dbt導入に至った理由
 
 ● 話さないこと
 ○ dbtの構築の話
 ○ 好きなコーヒー豆の産地とお笑い芸人について 


Slide 5

Slide 5 text

こういう課題ありませんか?
 その1


Slide 6

Slide 6 text

むかしむかし、あるところに
 データ分析者が2名おりました


Slide 7

Slide 7 text

7
 AさんとBさんがデータを出していました。
 今月のアクセスユーザー は、100000人でした 今月のアクセスユーザー は、97000人でした

Slide 8

Slide 8 text

?


Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

こういう課題ありませんか?
 その2


Slide 12

Slide 12 text

同じ条件を分析者みんな書いてる


Slide 13

Slide 13 text

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


Slide 14

Slide 14 text

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


Slide 15

Slide 15 text

共通化したい...


Slide 16

Slide 16 text

みなさんも分析で起きる
 課題あるあるがあったらツイート
 教えてください
 #data_findy


Slide 17

Slide 17 text

17
 いまこのあたりです
 
 1. 自己紹介
 2. 今回話すこと、話さないこと
 3. こういう課題ありませんか?
 4. ざっくりと理解するdbt
 5. dbtを導入した結果
 6. まとめ
 7. 告知


Slide 18

Slide 18 text

ざっくりと理解するdbt


Slide 19

Slide 19 text

19
 ざっくりと理解するdbt
 ● dbtは、データウェアハウスと連携して使用され、ETLにおけるTransformの役割 を実現してくれます。
 ● SQLファイルで各tableやviewを定義することができます。
 ● データエンジニアやアナリストがデータウェアハウス内でのデータ変換を簡単に 行うことができます。


Slide 20

Slide 20 text

20
 ざっくりと理解するdbt
 ● dbt のmaterializationsは4種類あり、それぞれ以下の通りです。
 ○ view...ビューとして作成されます。何も指定しない場合、デフォルトでviewが指定されま す。
 ○ table...テーブルとして作成されます。 モデルはテーブルとして再構築されます。実行ご とにcreate table します。
 ○ incremental...テーブルとして作成されます。テーブルにレコードを挿入または更新でき ます。
 ○ ephemeral...モデルは SQL 文の CTE(共通テーブル式) に変換されます。データウェア ハウス上では構築されません。 
 参考)https://docs.getdbt.com/docs/build/materializations

Slide 21

Slide 21 text

21
 ざっくりと理解するdbt
 dbt run


Slide 22

Slide 22 text

dbtを導入した結果


Slide 23

Slide 23 text

23
 dbtを導入した結果
 ● GitHubを使って複数人で管理できるようになった
 ● 複数人で使用している処理を共通化できるようになった
 ● コミットする人が増えた


Slide 24

Slide 24 text

24
 
 現在の構成図


Slide 25

Slide 25 text

25
 これまで
 2023-08-01からいままでの アクセスユーザー出してくれ ませんか?? いいですよ〜

Slide 26

Slide 26 text

26
 これまで
 ありがとうございます〜 どうぞ〜 SELECT count(distinct user_id) FROM access_log WHERE access_at > 2023-08-01

Slide 27

Slide 27 text

27
 これまで
 数字まちがってて予 算の見積もり まちがえた😢

Slide 28

Slide 28 text

28
 dbt導入後
 2023-08-01からいままでの アクセスユーザー出してくれ ませんか?? いいですよ〜

Slide 29

Slide 29 text

29
 dbt導入後
 ありがとうございます〜 レビューお願いします〜

Slide 30

Slide 30 text

30
 dbt導入後
 条件間違ってませんか? 確認します〜〜

Slide 31

Slide 31 text

31
 dbt導入後
 ありがとうございます! 修正しました〜

Slide 32

Slide 32 text

32
 dbtを導入した結果
 ● Githubを使って複数人で管理できるようになった
 ● 複数人で使用している処理を共通化できるようになった
 ● コミットする人が増えた


Slide 33

Slide 33 text

33
 dbtを導入した結果
 ● Githubを使って複数人で管理できるようになった
 ● 複数人で使用している処理を共通化できるようになった
 ● コミットする人が増えた


Slide 34

Slide 34 text

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


Slide 35

Slide 35 text

35
 ざっくりと理解するdbt
 ● dbt のmaterializationsは4種類あり、それぞれ以下の通りです。
 ○ view...ビューとして作成されます。何も指定しない場合、デフォルトでviewが指定されま す。
 ○ table...テーブルとして作成されます。 モデルはテーブルとして再構築されます。実行ご とにcreate table します。
 ○ incremental...テーブルとして作成されます。テーブルにレコードを挿入または更新でき ます。
 ○ ephemeral...モデルは SQL 文の CTE(共通テーブル式) に変換されます。データウェア ハウス上では構築されません。 
 参考)https://docs.getdbt.com/docs/build/materializations

Slide 36

Slide 36 text

36
 複数人で使用している処理を共通化できるようになった
 ● findyのuserをephemeralで記述


Slide 37

Slide 37 text

37
 複数人で使用している処理を共通化できるようになった
 


Slide 38

Slide 38 text

38
 dbtを導入した現状
 ● GitHubを使って複数人で管理できるようになった
 ● 複数人で使用している処理を共通化できるようになった
 ● コミットする人が増えた


Slide 39

Slide 39 text

39
 dbtを導入した現状
 ● GitHubを使って複数人で管理できるようになった
 ● 複数人で使用している処理を共通化できるようになった
 ● コミットする人が増えた


Slide 40

Slide 40 text

40
 コミットする人が増えた
 ● GitHubの環境とSQLが書ければ作成できるので、複数人で管理できるようになり ました。
 ● 新しく入社していただいた方に事業KPIの移行をgood first issueとしてお願いしま した。
 ● レビューの仕組みがある為、クエリを作成するハードルが下がった。


Slide 41

Slide 41 text

まとめ


Slide 42

Slide 42 text

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


Slide 43

Slide 43 text

43
 のびしろ
 ● Airflow等のマネージメントサービスを使用してフローを見えるようにしていきた い。
 ○ 現状のjob管理はGitHub Actionsを使用しています。 
 ● BIツールの整備
 ● dbt docsでテーブルを参照しやすい形にしていきたい。


Slide 44

Slide 44 text

告知


Slide 45

Slide 45 text

45
 告知)dbt求人特集やってます


Slide 46

Slide 46 text

46
 積極採用中です!!
 ● dbtを用いてデータ分析のスピードを上げていき、事業への貢献スピードをあげて いける楽しい段階です!
 ● 興味ある方はXのDMかFindyからメッセージください!!
 ● ファインディ株式会社のエンジニア求人一覧 
 ● ファインディ採用情報 
 X : @yamayafumiteru

Slide 47

Slide 47 text

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


Slide 48

Slide 48 text

ご清聴ありがとうございました。