Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Treasure Data TechTalk 2022 - TD CDP in 30 minutes
Search
Minero Aoki
November 29, 2022
Technology
1
2.3k
Treasure Data TechTalk 2022 - TD CDP in 30 minutes
Treasure Data TechTalk 2022
で発表した「30分でわかるTreasure Data CDP」のスライドです。
Minero Aoki
November 29, 2022
Tweet
Share
More Decks by Minero Aoki
See All by Minero Aoki
Data Engineering Study #20 "Introduction to Data Analytics with SQL" Book
aamine
15
5k
Why Cookpad Is Choosing Redshift as Our Data Platform
aamine
5
2.9k
Amazon Redshift事例祭り2020 - ぼくのかんがえたさいきょうのデータ活用基盤
aamine
2
900
Cookpad TechKitchen #8: Breaking BatchJobs Beautifully
aamine
3
1.4k
Cookpad 2016 Summer Intern: Programming Paradigm
aamine
4
19k
Other Decks in Technology
See All in Technology
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
3
350
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
2
520
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
7
690
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
130
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
200
Lexical Analysis
shigashiyama
1
150
安心してください、日本語使えますよ―Ubuntu日本語Remix提供休止に寄せて― 2024-11-17
nobutomurata
1
1k
The Rise of LLMOps
asei
9
1.8k
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
29
13k
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
200
Featured
See All Featured
RailsConf 2023
tenderlove
29
900
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Building Adaptive Systems
keathley
38
2.3k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Being A Developer After 40
akosma
87
590k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Code Review Best Practice
trishagee
64
17k
A Philosophy of Restraint
colly
203
16k
We Have a Design System, Now What?
morganepeng
50
7.2k
Transcript
2022-11-29 30分でわかる! Treasure Data CDP 〜Applicationsチームプレゼンツ・おもしろ技術博覧会〜 Minero Aoki
© 2022 Treasure Data, Inc. 自己紹介 • 青木峰郎(あおき みねろう) •
元Rubyコミッター、著書多数→ • 前々職 並列RDBMSベンダー ◦ 並列データベースと出会う • 前職 クックパッド ◦ 検索分析サービス「たべみる」の開発 ◦ DWHの構築 • 現職 Treasure Data(3月から) ◦ Apps BE(Applications Backend)チーム にてCDPの開発
© 2022 Treasure Data, Inc. 3 Agenda 1. CDPとは 2.
Treasure Data CDPの概要 3. IDの統合 4. Parent Segmentの構築 5. 顧客セグメントの活用 6. Treasure Data CDPの最新機能
© 2022 Treasure Data, Inc. 4 1. CDPとは
© 2022 Treasure Data, Inc. CDPとは?
© 2022 Treasure Data, Inc. CDP: Customer Data Platformとは…… CDPは(1)統合された顧客データベースを持ち、(
2)他システムから利用することができます。定 義: https://www.cdpinstitute.org/learning-center/what-is-a-cdp/ 6 顧客データをマーケティングに 活用するためのシステムのこと
© 2022 Treasure Data, Inc. それってDWHやらDMPって やつらとは違うの?
© 2022 Treasure Data, Inc. CDPはアプリ+DB、DWHはデータ自体 • CDPはアプリケーション+データベースの全体 • DWH(Data
Warehouse)は履歴データを収集し統合する という点ではCDPと非常に似ているが、アプリケーションは 含まない • CDPは顧客データに特化しているが、DWHは他のサブ ジェクト(例: 仕入れとか生産とか)も持つ app CDP DWH DWHの定義: https://en.wikipedia.org/wiki/Data_warehouse#Data_warehouse_characteristics
© 2022 Treasure Data, Inc. CDPとDMPの区別は難しい • CDPは主にマーケティングで使われる • DMPは広告領域で使われる
• public DMPはanonymous userに主眼があり CDPはnamed userに主眼がある • private DMPはnamed userも持つので CDPと区別がつかない app CDP? DMP?
© 2022 Treasure Data, Inc. 10 2. Treasure Data CDPの概要
© 2022 Treasure Data, Inc. Treasure Data CDPは…… 11 顧客をセグメントに分割し、
セグメントごとに施策を打つシステム
© 2022 Treasure Data, Inc. Plazma Treasure Data CDPアーキテクチャの概要 fluentd
バルク embulk Digdag ストリーム ジョブ起動 ID Unifi- cation Audience workflow Activation KVS RDB Appsチーム
© 2022 Treasure Data, Inc. Applications Backendチームの主要な担当領域 Audience Workflow ID統合済み
テーブル Parent Segment 最適化・情報付与 セグメント計算・転送 各種システムへ…… Activation ID Unification (optional) ソース テーブル ID統合 ユーザー管理 CDP管理
© 2022 Treasure Data, Inc. Applications Backendチームの担当領域 領域 担当メンバー チームリーダー
@spikeolaf 新機能1 @k_tsj, @hkdnet 新機能2 @chezou, @ganmacs, @dmikurube, iwabuchi 新機能3 @inohiro 新機能4 @uu59 CJO @Lewuathe ID Unification, Audience Workflow @mineroaoki 黒幕 @naruse 基本的に1機能1人で担当しています
© 2022 Treasure Data, Inc. 一人一殺 必殺仕事人が新機能を一人一殺で倒していくアットホームなチームです
© 2022 Treasure Data, Inc. 3. IDの統合: ID Unification
© 2022 Treasure Data, Inc. ID統合とは…… • 例: 実店舗のポイントカードのユーザー IDとウェブのユーザーID
• 同じ人に対応するユーザーIDは1つになっていてほしいが、現実にはそうでないことが多い。 そこでIDをできるだけ1つにまとめる処理がID統合 • いわゆる「名寄せ」に近い 複数系列のユーザーIDなどを つないで1つのIDにすること
© 2022 Treasure Data, Inc. ID UnificationによるID統合 • TDのID Unificationはテーブルのリレーションシップだけを元に統合する
• 曖昧性のある統合はサポートしていない • 例: 住所と電話番号とメアドのうち2つが一致していたら統合 id card_id cookie_id 3533895 984676 2353466 3544896 984677 1216623 3544896 984679 6325606 cookie_id web_user_id 2201857 15320509 1216623 15320510 4425606 15320511 ポイントカードマスター ウェブアクセスログ
© 2022 Treasure Data, Inc. ID UnificationのID統合アルゴリズム(超簡略版) 1. IDカラムだけをすべて抜き出す 2.
リレーションシップを元に、関連付けられたキーをグループにしていく 3. グループ化が収束するまで2を繰り返す card_id cookie_id 984676 2353466 984677 1216623 984679 6325606 cookie_id web_user_id 2201857 15320509 1216623 15320510 4425606 15320511 web_user_id cmpn_cid 15320509 5320577 15320510 5320578 15320511 5320579 1回目 2回目
© 2022 Treasure Data, Inc. (SQLで) 計算が収束するまで 繰り返す……だと……?
© 2022 Treasure Data, Inc. ID UnificationのDigdagワークフロー(抜粋) +unify_loop: loop>: <%=
マージ回数 %> _do: +iteration: td>: query: IDグループ化クエリー 確かになんかループしている ……
© 2022 Treasure Data, Inc. 4. Parent Segmentの構築: Audience Workflow
© 2022 Treasure Data, Inc. Audience Workflowの機能 機能 効果 Parent
Segmentのビルド セグメント計算に最適化したテーブルを構築する 地域コード付与 IPアドレスから国や地域を特定し、そのコードを付与する テキスト特徴量付与 訪問したウェブページの特徴を抽出して付与する Predictive Scoring 機械学習を使って計算したスコアを付与する
© 2022 Treasure Data, Inc. 何のための最適化? Audience Workflow ソース テーブル
Parent Segment Activation 最適化・情報付与 セグメント計算 各種シス テムへ…… バッチ つど計算 セグメントはコンソール操作や Activationのたびにその場で計算されるので、 それなりのレイテンシで完了するように最適化しなければならない
© 2022 Treasure Data, Inc. アカウントごとに環境はまったく異なる (1)データ量 a, b, c
(2)テーブル定義 x,y,z,m,n,p,. (3)偏り → すべてに対応するには動的な仕組みが必要
© 2022 Treasure Data, Inc. Digdagワークフローは基本的に静的 Digdagサーバーに事前に登録したワークフローがスケジュール起動される Digdag timezone: UTC
schedule: daily>: 06:00:00 +create_database: td_ddl>: create_databases: [${matrix_database_name}] _retry: 5 +create_table_customers: td>: create_empty_table.sql engine: 'presto' table_name: ${matrix_customers_tmp_table_name} _retry: 5 +customers: td>:customers.sql engine: hive insert_into: ${matrix_customers_tmp_table_name} _retry: 5 …… Plazma SQL SQL SQL スケジュール 起動 xxxx.dig この食い違いをどう解決するか?
© 2022 Treasure Data, Inc. ワークフローの一部だけが 外部から読み込まれる
© 2022 Treasure Data, Inc. 『静的』だけど『静的』じゃない それがAudience Workflowレクイエム ワークフローの冒頭で APIサーバーから動的パラメーターを読み込んで注入する
Digdag timezone: UTC schedule: daily>: 06:00:00 +create_database: td_ddl>: create_databases: [${matrix_database_name}] _retry: 5 +create_table_customers: td>: create_empty_table.sql engine: 'presto' table_name: ${matrix_customers_tmp_table_name} _retry: 5 +customers: td>:customers.sql engine: hive insert_into: ${matrix_customers_tmp_table_name} _retry: 5 …… Plazma SQL SQL SQL スケジュール 起動 audience.dig CDP-API 動的に注入する
© 2022 Treasure Data, Inc. Audience WorkflowのDigdagワークフロー(抜粋) +get_queries: http>: <%=
escape_yaml_literal @queries_uri %> headers: 略 store_content: true +customers: td>: query: ${JSON.parse(http.last_content)["customers"]} engine: ${JSON.parse(http.last_content)["customers_engine"]} insert_into: <%= escape_yaml_literal @matrix_customers_tmp_table_name %> <%- if @special_behavior_workflow -%> +behaviors: for_each>: behavior_workflow_name: <%= escape_yaml_literal @behavior_workflow_names %> _do: +run_behavior_workflow: require>: ${behavior_workflow_name} <%- else -%> +behaviors: for_each>: behavior: ${Object.keys(JSON.parse(http.last_content)["behaviors"])} _do: CDP-APIを呼んで動的パラメーターを取得 動的なパラメーターの埋め込み これは静的な分岐 静的なパラメーター また動的なパラメーター (静的パラメーターからの派生値なので)これも静的 セグメント作成時、ワークフロー起動時、ワークフロー実行中に 評価タイミングがバラまかれている酷いワークフロー ぼくと契約して動的 ワークフローになってよ! CDP-API(悪)
© 2022 Treasure Data, Inc. 動的パラメーターの一部 • クエリーエンジン • データ量によってPresto
/ Hiveを切り替える • パーティション数 • これもデータ量によって変わる • カラム一覧 • 実行のたびに変わる可能性があるため、つど取得する • クエリー • Presto / Hive両対応の時点で不可避
© 2022 Treasure Data, Inc. かわいいワークフローと思った? 残念! 悪クフローちゃんでした! ワークフローとAPIの 双方にバージョンがあります
© 2022 Treasure Data, Inc. 現代における解決策 • 現在はワークフロー全体を動的に生成するhttp_call>オペレーターがDigdagに追 加されており、これを使うとスマートに解決できる。 •
すべてを動的に変え放題! • 評価タイミングのズレがなくなる! • あらゆるお客さんが自動的に最新バージョン! • 最高!
© 2022 Treasure Data, Inc. 5. 顧客セグメントの活用: ActivationとCDP KVS
© 2022 Treasure Data, Inc. セグメントの計算 セグメントの構築条件はIonという形式で表現されており、 それをSQLにコンパイルして実行する。 Ion SQL
Plazma コンパイル 出力 TDウェブ コンソール クエリー
© 2022 Treasure Data, Inc. Ionとは…… SQLの条件節のASTを JSONで表現したもの
© 2022 Treasure Data, Inc. IonはSQLの構文木(AST)そのもの { type: “And”, conditions:
[ { type: “Value”, left_value: { database: “cdp_audience_1”, table: “customers”, column: “country_id” }, operator: { type: “Equal”, not: false, right_value: “Japan” } }, { type: “Value”, left_value: { name: “age” }, operator: { type: “Equal”, not: false, right_value: 36 } ] } And country_id = ‘Japan’ age = 36 対応するSQLのAST Ion 余談: IonはCDP-APIのリクエストパラメーターなの で、OpenAPIでSQLの構文を書くことに……
© 2022 Treasure Data, Inc. Activation • セグメントはいろいろなシステムに転送して活用できる。 • メール
• プッシュ通知 • 広告 • クーポンを出す • などなど様々なコネクターがある。 • ActivationはCDP最大の目的。CDPはActivationのためにある。
© 2022 Treasure Data, Inc. リアルタイムアクセスを実現するCDP KVS • セグメントはPostgreSQL /
DynamoDBに書き込んで、オンラインアプリケーション からAPI経由でアクセスすることが可能。 Plazma CDP KVS バッチ転送 Ignite Dynamo DB lookup APIアクセス
© 2022 Treasure Data, Inc. 6. CDPの最新機能
© 2022 Treasure Data, Inc. CJO: Customer Journey Orchestration 「店舗に3回以上来店したらロイヤルカスタマーに昇格」のような
複雑な状態遷移(いわゆるカスタマージャーニー)を顧客ごとに保持し、 状態に対応するセグメントを作ることができる
© 2022 Treasure Data, Inc. CJOの内部実装 超巨大な横長テーブルにカラムとして全ステートを並べて、行を更新することで状態遷移を表現する customer_id st_1 st_2
st_3 st_4 st_5 st_6 st_7 st_8 st_9 …… aaaaaaaaa ◯ bbbbbbbbb ◯ cccccccccc ◯ ddddddddd ◯ ◯ eeeeeeeee ◯ fffffffffffff ◯ ggggggggg ◯ UPDATE(状態遷移)
© 2022 Treasure Data, Inc. まとめ
© 2022 Treasure Data, Inc. まとめ 1. CDPは顧客データをマーケティングに活用するた めのプラットフォーム 2.
TD CDPは顧客のセグメントを作って様々な施策 を行うことができる 3. TD CDPはまだまだ新機能を開発中です 4. ……
© 2022 Treasure Data, Inc. 4. We are hiring! >
https://www.treasuredata.com/company/careers/
© 2022 Treasure Data, Inc. 45 ご清聴ありがとうございました