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

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

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

Yappli Tech Conference 2023 の発表資料です。

▼登壇記事▼
https://tech.yappli.io/entry/yapplitechconf2023-data

▼イベントページ▼
https://yappli.connpass.com/event/295001/

yamamoto-yuta

October 19, 2023
Tweet

More Decks by yamamoto-yuta

Other Decks in Technology

Transcript

  1. Speaker プロダクト開発本部 技術戦略室 データサイエンティスト ⼭本 雄太 • 23新卒データサイエンティスト • dbtを使⽤した集計システムの刷新を担当

    • 学⽣時代は機械学習を⽤いた特許解析の研究に取 り組みつつ、インターン等を通してWebシステム の開発‧運⽤を経験 • 社内でのあだ名は「もっさん」 @__Y4M4MOTO__
  2. 1 2 本⽇お伝えする内容 本⽇お伝えしない内容 • ヤプリの分析⽤データ基盤をdbtで刷新しようとしている話 • 刷新によって、Yappli 管理画⾯ (CMS)

    のダッシュボード⽤集計クエリの実⾏費⽤を90%削減しよう としている話 ➡︎ まだ刷新途中 • 刷新を完了して得られた効果 • 実際どのくらい費⽤を削減できたのか? ➡︎ 刷新完了後、またどこかで…! 00 はじめに
  3. 01 分析⽤データ基盤刷新に⾄った経緯 次の10年を戦えるデータ活⽤ロードマップ データマネジメントの強化 STEP 1 データの⼀次活⽤の強化 STEP 2 データの⼆次活⽤

    STEP 3 • データモデリング • データカタログ作成 etc … 今ココ • アプリ横断での分析 etc … • 効果検証、レコメンド • ⽣成 AI への埋め込み etc …
  4. 02 課題①|分析⽤データマートの全容把握が困難 ヤプリの分析⽤データマート • BigQuery を DWH として、trocco でデータマートを作成 •

    分析基盤構築‧運⽤の⽀援SaaS • ETL/データ転送 • データマート⽣成 • ジョブ管理 • etc … 画像: trocco サービスページから引⽤ 「trocco」とは?
  5. 02 課題①|分析⽤データマートの全容把握が困難 分析⽤データマート作成 trocco ワークフロー Data Hub 共通 データマート作成ジョブ Data

    Hub クライアント別 データマート作成ジョブ Yappli Analytics ⽤ データマート作成ジョブ データマートの全容が把握しづらい…
  6. 03 課題②|CMSダッシュボードのクエリ費⽤の削減 Yappli の CMS では次のダッシュボードを提供 • 新規ユーザ数 • QR/短縮URLコード読み取り数

    • アクティブユーザ数 • コンテンツ閲覧数 • オートプッシュ配信数 • クーポン利⽤数 • プッシュ配信数
  7. 03 課題②|CMSダッシュボードのクエリ費⽤の削減 CMSダッシュボードの成り⽴ち • 各データの集計をデータソースから1クエリで⾏うと… メリット • 実装スピードが早い • 集計結果に異常があった際の原因が単⼀のクエリ内に限定される

    • 集計結果を修正する際のデータ差し替えが容易 デメリット • 過去分の結果を毎⽇更新するため、同じ集計を何度も⾏わざるを得ない 
 ➡︎ 処理⾯、データスキャン量(=コスト)⾯で無駄が多い 運⽤開始から3年経った現在では、 メリットよりデメリットの⽅が勝ってしまっている状況
  8. 04 分析⽤データ基盤刷新の⽅向性 今の分析⽤データ基盤 BigQuery Data Hub メインワークフロー Data Hub 共通データマート

    作成ジョブ Data Hub クライアント別データマート 作成ジョブ Yappli Analytics ⽤ データマート 作成ジョブ Yappli CMS ダッシュボード
  9. 04 分析⽤データ基盤刷新の⽅向性 今の分析⽤データ基盤 1 . Data Hub 共通データマート作成ジョブを 
 データ分析全般⽤の共通データマート作成ジョブへ刷新

    2 . CMS ダッシュボード集計元を切り替え BigQuery Data Hub メインワークフロー Data Hub 共通データマート 作成ジョブ Data Hub クライアント別データマート 作成ジョブ Yappli Analytics ⽤ データマート 作成ジョブ Yappli CMS ダッシュボード
  10. 04 分析⽤データ基盤刷新の⽅向性 刷新⽅法 • データマート作成処理を dbt でリプレイス • データの加⼯処理を管理してくれるツール •

    SQL による加⼯処理の git 管理を可能に • データカタログの⾃動⽣成 • データのテスト • etc … • 無償CLI版と有償SaaS版がある • ヤプリでは無償CLI版を採⽤ 「dbt」とは?
  11. 04 分析⽤データ基盤刷新の⽅向性 dbtを採⽤した理由 • trocco が dbt 連携を追加料⾦なしでサポートしていたため • 他の選択肢は下記を無視できるほどのメリットは無いと判断:

    • 社内で trocco がすでに普及 • trocco が dbt を追加料⾦なしでサポート • オーケストレーションツールが複数にまたがると運⽤が複雑化
  12. 04 分析⽤データ基盤刷新の⽅向性 現時点での分析⽤データ基盤の状況 BigQuery Data Hub メインワークフロー Data Hub 共通データマート

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

    共通データマート 作成ジョブ Data Hub クライアント別データマート 作成ジョブ Yappli CMS ダッシュボード CMS ダッシュボードの 集計元切り替えを実施中… Yappli Analytics ⽤ データマート 作成ジョブ データ分析全般⽤ 共通データマート 作成ジョブ データ分析全般⽤ 共通データマート作成 dbt プロジェクト trocco 上で実⾏ 共通データマートの dbt での作り直しは完了
  14. 04 分析⽤データ基盤刷新の⽅向性 共通データマートの dbt モデリング Staging • View で実体化 •

    データソースにあるテーブルと1:1対応で作成 • 名前や値の揺らぎを是正 Component • Table で実体化 • ディメンションテーブルやファクトテーブルを作成 Aggregation • Table で実体化 • ダッシュボード等で参照するためのデータマートテーブルを作成 データソース BigQuery、スプレッドシート etc … データ活⽤ ダッシュボード etc …
  15. 04 分析⽤データ基盤刷新の⽅向性 CMS ダッシュボードの集計元切り替え⽅法 既存クエリ sku アクティブユーザ数 xxx xxx xxx

    xxx … … ① 条件を固定して実⾏ ② 実⾏結果を   保存 新クエリ sku アクティブユーザ数 xxx xxx xxx xxx … … ③ 同じ条件で実⾏ ④ 実⾏結果を⽐較
  16. 04 分析⽤データ基盤刷新の⽅向性 現時点での分析⽤データ基盤の状況 BigQuery Data Hub メインワークフロー Data Hub 共通データマート

    作成ジョブ Data Hub クライアント別データマート 作成ジョブ Yappli CMS ダッシュボード 新ワークフロー Yappli Analytics ⽤ データマート 作成ジョブ データ分析全般⽤ 共通データマート 作成ジョブ データ分析全般⽤ 共通データマート作成 dbt プロジェクト trocco 上で実⾏ 既存の共通データマートとの 置き換えは今後実施予定
  17. 1 dbt docs を GitHub Page でホスティング&⾃動更新 05 刷新にあたっての⼯夫点 •

    モデルの情報、関係性を簡単&すぐに確認可能 ➡ CMSダッシュボードの集計元切り替えで、 
 既存クエリと新クエリの差分発⽣時の原因特定がスムーズに
  18. 2 他の DS メンバー向けに dbt 学習資料を⽤意 05 刷新にあたっての⼯夫点 • まだ刷新プロジェクト担当の

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

    • 実際に取り組んだインターン⽣の声: • 「dbt を使ったことがない⼈にとって⾮常に助かる資料」 • 「辞書のように使っている」 • 「資料をもとに⾃分で新たにソリューション開発を⾏った時が⼀番 dbt スキルがついた」
  20. 3 データマート側とプロダクト側で責務を明確化 05 刷新にあたっての⼯夫点 • 今まで、 CMS ダッシュボードはデータソースから1クエリで集計を実施 ➡単なる集計とプロダクト側の仕様が集計クエリに混在… •

    カラムの順番、名前 • プロダクト側で必要な追加カラム( ID カラム、 Appendix カラム etc … ) • 集計ロジックはデータマート側の責務、 
 仕様に合わせる処理はプロダクト側の責務としてクエリを作成 ➡集計結果に異常が発⽣した際、修正範囲がデータマート側で完結可能
  21. 06 まとめ 本⽇お伝えした内容 • ヤプリの今の分析⽤データ基盤には次の課題が存在: • 分析⽤データマートの全容が把握しづらい • CMS ダッシュボードのクエリ費⽤がかさんでしまっている

    • 課題に対し、次の2つを現在実施中: • 共通データマートを dbt で刷新 • CMS ダッシュボードの集計元をデータソース直接から共通データマートへ切り替え • 刷新にあたっての⼯夫点は次の3つ: • dbt docs を GitHub Page でホスティング&⾃動更新 • 他の DS メンバー向けに dbt 学習資料を⽤意 • データマート側とプロダクト側で責務を明確化