Slide 1

Slide 1 text

次の10年を戦える 分析⽤データ基盤構築の第⼀歩 - dbtによる基盤刷新とクエリ費⽤90%削減への取り組み -

Slide 2

Slide 2 text

Speaker プロダクト開発本部 技術戦略室 データサイエンティスト ⼭本 雄太 • 23新卒データサイエンティスト • dbtを使⽤した集計システムの刷新を担当 • 学⽣時代は機械学習を⽤いた特許解析の研究に取 り組みつつ、インターン等を通してWebシステム の開発‧運⽤を経験 • 社内でのあだ名は「もっさん」 @__Y4M4MOTO__

Slide 3

Slide 3 text

1 2 本⽇お伝えする内容 本⽇お伝えしない内容 • ヤプリの分析⽤データ基盤をdbtで刷新しようとしている話 • 刷新によって、Yappli 管理画⾯ (CMS) のダッシュボード⽤集計クエリの実⾏費⽤を90%削減しよう としている話 ➡︎ まだ刷新途中 • 刷新を完了して得られた効果 • 実際どのくらい費⽤を削減できたのか? ➡︎ 刷新完了後、またどこかで…! 00 はじめに

Slide 4

Slide 4 text

01 02 03 04 05 06 分析⽤データ基盤刷新に⾄った経緯 課題①|分析⽤データマートの全容把握が困難 課題②|CMSダッシュボードのクエリ費⽤の削減 分析⽤データ基盤刷新の⽅向性と現在の進捗状況 刷新にあたっての⼯夫点 まとめ

Slide 5

Slide 5 text

01 分析⽤データ基盤刷新に ⾄った経緯

Slide 6

Slide 6 text

01 分析⽤データ基盤刷新に⾄った経緯 10年⽬のヤプリにデータは⽋かせない存在 Yappli 管理画⾯ ダッシュボード Yappli Data Hub Yappli Analytics

Slide 7

Slide 7 text

01 分析⽤データ基盤刷新に⾄った経緯 新規事業でもデータは核となる存在 Yappli CRM Yappli for Retail App Ads Yappli UNITE

Slide 8

Slide 8 text

01 分析⽤データ基盤刷新に⾄った経緯 次の10年を戦えるデータ活⽤ロードマップ データマネジメントの強化 STEP 1 データの⼀次活⽤の強化 STEP 2 データの⼆次活⽤ STEP 3 • データモデリング • データカタログ作成 etc … 今ココ • アプリ横断での分析 etc … • 効果検証、レコメンド • ⽣成 AI への埋め込み etc …

Slide 9

Slide 9 text

01 分析⽤データ基盤刷新に⾄った経緯 今のヤプリの分析⽤データ基盤の課題 ① 分析⽤データマートの全容が把握しづらい ② CMSダッシュボードのクエリ費⽤がかさんでしまっている

Slide 10

Slide 10 text

02 課題① 分析⽤データマートの 全容把握が困難

Slide 11

Slide 11 text

02 課題①|分析⽤データマートの全容把握が困難 ヤプリの分析⽤データマート • BigQuery を DWH として、trocco でデータマートを作成 • 分析基盤構築‧運⽤の⽀援SaaS • ETL/データ転送 • データマート⽣成 • ジョブ管理 • etc … 画像: trocco サービスページから引⽤ 「trocco」とは?

Slide 12

Slide 12 text

02 課題①|分析⽤データマートの全容把握が困難 ヤプリではデータ活⽤ツールとして trocco が浸透 trocco がデータ活⽤の要

Slide 13

Slide 13 text

02 課題①|分析⽤データマートの全容把握が困難 分析⽤データマート作成 trocco ワークフロー

Slide 14

Slide 14 text

02 課題①|分析⽤データマートの全容把握が困難 分析⽤データマート作成 trocco ワークフロー ワークフロー実⾏ジョブが3段

Slide 15

Slide 15 text

02 課題①|分析⽤データマートの全容把握が困難 分析⽤データマート作成 trocco ワークフロー Data Hub 共通 データマート作成ジョブ Data Hub クライアント別 データマート作成ジョブ Yappli Analytics ⽤ データマート作成ジョブ

Slide 16

Slide 16 text

02 課題①|分析⽤データマートの全容把握が困難 分析⽤データマート作成 trocco ワークフロー Data Hub 共通 データマート作成ジョブ Data Hub クライアント別 データマート作成ジョブ Yappli Analytics ⽤ データマート作成ジョブ データマートの全容が把握しづらい…

Slide 17

Slide 17 text

02 課題①|分析⽤データマートの全容把握が困難 今の分析⽤データマート作成⽅法の課題 このジョブで参照しているテーブルの 成り⽴ちを知るには… Data Hub クライアント別 データマート作成ジョブ Data Hub 共通 データマート作成ジョブ ここまで遡って1つずつ ジョブを確認するしかない

Slide 18

Slide 18 text

02 課題①|分析⽤データマートの全容把握が困難 今の分析⽤データマート作成⽅法の課題 Data Hub 共通 データマート作成ジョブ 各ジョブが参照‧作成しているテーブルの関係 どこでどのテーブルが参照‧作成されているのか?が把握しづらい…

Slide 19

Slide 19 text

02 課題①|分析⽤データマートの全容把握が困難 分析⽤データマートの全容が把握しづらいと… • ワークフローのメンテナンスが⼤変 • メンテナンス作業が属⼈化

Slide 20

Slide 20 text

03 課題② CMSダッシュボードの クエリ費⽤の削減

Slide 21

Slide 21 text

03 課題②|CMSダッシュボードのクエリ費⽤の削減 Yappli の CMS では次のダッシュボードを提供 • 新規ユーザ数 • QR/短縮URLコード読み取り数 • アクティブユーザ数 • コンテンツ閲覧数 • オートプッシュ配信数 • クーポン利⽤数 • プッシュ配信数

Slide 22

Slide 22 text

03 課題②|CMSダッシュボードのクエリ費⽤の削減 CMSダッシュボードの成り⽴ち • 今の CMS ダッシュボードができたのは3年前 • 運⽤時の修正対応やアップデートのしやすさを考慮して、 
 各データの集計をデータソースから1クエリで⾏うよう実装 データソース CMSダッシュボード クエリ

Slide 23

Slide 23 text

03 課題②|CMSダッシュボードのクエリ費⽤の削減 CMSダッシュボードの成り⽴ち • 各データの集計をデータソースから1クエリで⾏うと… メリット • 実装スピードが早い • 集計結果に異常があった際の原因が単⼀のクエリ内に限定される • 集計結果を修正する際のデータ差し替えが容易 デメリット • 過去分の結果を毎⽇更新するため、同じ集計を何度も⾏わざるを得ない 
 ➡︎ 処理⾯、データスキャン量(=コスト)⾯で無駄が多い 運⽤開始から3年経った現在では、 メリットよりデメリットの⽅が勝ってしまっている状況

Slide 24

Slide 24 text

03 課題②|CMSダッシュボードのクエリ費⽤の削減 集計元切り替えによるクエリ費⽤へのインパクト データソースから 直接集計 共通データマートから集計 クエリ費⽤ 約90%削減 分析⽤データ基盤刷新と併せてクエリの集計元切り替えも実施することに

Slide 25

Slide 25 text

04 分析⽤データ基盤刷新の ⽅向性と現在の進捗状況

Slide 26

Slide 26 text

04 分析⽤データ基盤刷新の⽅向性 今の分析⽤データ基盤 BigQuery Data Hub メインワークフロー Data Hub 共通データマート 作成ジョブ Data Hub クライアント別データマート 作成ジョブ Yappli Analytics ⽤ データマート 作成ジョブ Yappli CMS ダッシュボード

Slide 27

Slide 27 text

04 分析⽤データ基盤刷新の⽅向性 今の分析⽤データ基盤 1 . Data Hub 共通データマート作成ジョブを 
 データ分析全般⽤の共通データマート作成ジョブへ刷新 2 . CMS ダッシュボード集計元を切り替え BigQuery Data Hub メインワークフロー Data Hub 共通データマート 作成ジョブ Data Hub クライアント別データマート 作成ジョブ Yappli Analytics ⽤ データマート 作成ジョブ Yappli CMS ダッシュボード

Slide 28

Slide 28 text

04 分析⽤データ基盤刷新の⽅向性 刷新⽅法 • データマート作成処理を dbt でリプレイス • データの加⼯処理を管理してくれるツール • SQL による加⼯処理の git 管理を可能に • データカタログの⾃動⽣成 • データのテスト • etc … • 無償CLI版と有償SaaS版がある • ヤプリでは無償CLI版を採⽤ 「dbt」とは?

Slide 29

Slide 29 text

04 分析⽤データ基盤刷新の⽅向性 dbtを採⽤した理由 • trocco が dbt 連携を追加料⾦なしでサポートしていたため • 他の選択肢は下記を無視できるほどのメリットは無いと判断: • 社内で trocco がすでに普及 • trocco が dbt を追加料⾦なしでサポート • オーケストレーションツールが複数にまたがると運⽤が複雑化

Slide 30

Slide 30 text

04 分析⽤データ基盤刷新の⽅向性 現時点での分析⽤データ基盤の状況 BigQuery Data Hub メインワークフロー Data Hub 共通データマート 作成ジョブ Data Hub クライアント別データマート 作成ジョブ Yappli CMS ダッシュボード 新ワークフロー データ分析全般⽤ 共通データマート 作成ジョブ データ分析全般⽤ 共通データマート作成 dbt プロジェクト trocco 上で実⾏ Yappli Analytics ⽤ データマート 作成ジョブ

Slide 31

Slide 31 text

新ワークフロー 04 分析⽤データ基盤刷新の⽅向性 現時点での分析⽤データ基盤の状況 BigQuery Data Hub メインワークフロー Data Hub 共通データマート 作成ジョブ Data Hub クライアント別データマート 作成ジョブ Yappli CMS ダッシュボード CMS ダッシュボードの 集計元切り替えを実施中… Yappli Analytics ⽤ データマート 作成ジョブ データ分析全般⽤ 共通データマート 作成ジョブ データ分析全般⽤ 共通データマート作成 dbt プロジェクト trocco 上で実⾏ 共通データマートの dbt での作り直しは完了

Slide 32

Slide 32 text

04 分析⽤データ基盤刷新の⽅向性 共通データマートの dbt モデリング Staging • View で実体化 • データソースにあるテーブルと1:1対応で作成 • 名前や値の揺らぎを是正 Component • Table で実体化 • ディメンションテーブルやファクトテーブルを作成 Aggregation • Table で実体化 • ダッシュボード等で参照するためのデータマートテーブルを作成 データソース BigQuery、スプレッドシート etc … データ活⽤ ダッシュボード etc …

Slide 33

Slide 33 text

04 分析⽤データ基盤刷新の⽅向性 CMS ダッシュボードの集計元切り替え⽅法 既存クエリ sku アクティブユーザ数 xxx xxx xxx xxx … … ① 条件を固定して実⾏ ② 実⾏結果を   保存 新クエリ sku アクティブユーザ数 xxx xxx xxx xxx … … ③ 同じ条件で実⾏ ④ 実⾏結果を⽐較

Slide 34

Slide 34 text

04 分析⽤データ基盤刷新の⽅向性 現時点での分析⽤データ基盤の状況 BigQuery Data Hub メインワークフロー Data Hub 共通データマート 作成ジョブ Data Hub クライアント別データマート 作成ジョブ Yappli CMS ダッシュボード 新ワークフロー Yappli Analytics ⽤ データマート 作成ジョブ データ分析全般⽤ 共通データマート 作成ジョブ データ分析全般⽤ 共通データマート作成 dbt プロジェクト trocco 上で実⾏ 既存の共通データマートとの 置き換えは今後実施予定

Slide 35

Slide 35 text

05 刷新にあたっての⼯夫点

Slide 36

Slide 36 text

1 dbt docs を GitHub Page でホスティング&⾃動更新 05 刷新にあたっての⼯夫点 • モデルの情報、関係性を簡単&すぐに確認可能 ➡ CMSダッシュボードの集計元切り替えで、 
 既存クエリと新クエリの差分発⽣時の原因特定がスムーズに

Slide 37

Slide 37 text

2 他の DS メンバー向けに dbt 学習資料を⽤意 05 刷新にあたっての⼯夫点 • まだ刷新プロジェクト担当の DS メンバーしか dbt を扱えない ➡ メンテナンスの属⼈化防⽌のため、全 DS メンバーが dbt を扱えるようにしたい • ヤプリには、社内 Slack 活性化のための Slack データ基盤が存在 • チャンネル⼀覧、ユーザ⼀覧、メッセージ⼀覧のデータが利⽤可能 • 実際の Slack 活性化ソリューション開発を通して dbt を学習できる資料を作成 ➡ 基本操作だけでなく、より実践的な dbt スキルが⾝につけられる

Slide 38

Slide 38 text

2 他の DS メンバー向けに dbt 学習資料を⽤意 05 刷新にあたっての⼯夫点 • ドキュメントは全部で3チャプター

Slide 39

Slide 39 text

2 他の DS メンバー向けに dbt 学習資料を⽤意 05 刷新にあたっての⼯夫点 • 実際に開発された Slack 活性化ソリューション

Slide 40

Slide 40 text

2 他の DS メンバー向けに dbt 学習資料を⽤意 05 刷新にあたっての⼯夫点 • 内定者インターン⽣も取り組み中 • 実際に取り組んだインターン⽣の声: • 「dbt を使ったことがない⼈にとって⾮常に助かる資料」 • 「辞書のように使っている」 • 「資料をもとに⾃分で新たにソリューション開発を⾏った時が⼀番 dbt スキルがついた」

Slide 41

Slide 41 text

3 データマート側とプロダクト側で責務を明確化 05 刷新にあたっての⼯夫点 • 今まで、 CMS ダッシュボードはデータソースから1クエリで集計を実施 ➡単なる集計とプロダクト側の仕様が集計クエリに混在… • カラムの順番、名前 • プロダクト側で必要な追加カラム( ID カラム、 Appendix カラム etc … ) • 集計ロジックはデータマート側の責務、 
 仕様に合わせる処理はプロダクト側の責務としてクエリを作成 ➡集計結果に異常が発⽣した際、修正範囲がデータマート側で完結可能

Slide 42

Slide 42 text

06 まとめ

Slide 43

Slide 43 text

06 まとめ 本⽇お伝えした内容 • ヤプリの今の分析⽤データ基盤には次の課題が存在: • 分析⽤データマートの全容が把握しづらい • CMS ダッシュボードのクエリ費⽤がかさんでしまっている • 課題に対し、次の2つを現在実施中: • 共通データマートを dbt で刷新 • CMS ダッシュボードの集計元をデータソース直接から共通データマートへ切り替え • 刷新にあたっての⼯夫点は次の3つ: • dbt docs を GitHub Page でホスティング&⾃動更新 • 他の DS メンバー向けに dbt 学習資料を⽤意 • データマート側とプロダクト側で責務を明確化