本文へ移動

ホーム / Data / 第3部 データパイプライン

第3部 データパイプライン・第5章

データの取り込み(バッチ・CDC・API)

★★★ 必須10トピック・面接 6問

業務 DB・SaaS・アプリのイベント・ファイルなど、さまざまな元からデータを確実に集める方法を押さえる。ストリーム(Kafka)は次の章で扱う。

別のページで開く →

ネットワーク図を読み込んでいます…

5.1バッチと CDC

用語★★★ 必須
ひとことで

定期的にまとめて取るバッチと、DB の変更ログを読んでほぼリアルタイムに取る CDC。

分析に使うデータの多くは、業務システムの DB(注文・会員など)にあります。分析のために業務 DB へ直接重い集計を投げると本番のサービスが遅くなるので、DWH(データウェアハウス。分析用のデータベース)に写してから使います。

この「どうやって写すか」で、データの鮮度・本番への負荷・削除を取りこぼすかどうかが決まります。

業務 DB からデータを取り込む方法は大きく2つです。バッチは、決まった時刻にテーブルの全部か差分を SELECT して取ってくる方法です。CDC(Change Data Capture、変更データの取り込み)は、DB が内部で書いている変更のログ(MySQL の binlog、PostgreSQL の WAL)を読み、INSERT・UPDATE・DELETE を1件ずつほぼリアルタイムで流す方法です。Debezium などの道具や、クラウドの取り込みサービスを使います。

バッチは表を読みに行き、CDC は変更ログを読むバッチ業務 DB決まった時刻に SELECT(差分・全件)DWH物理削除された行は SELECT に出てこない → 取りこぼすCDCアプリ業務 DB変更ログbinlog・WALCDC ツールDebezium などKafkaDWHMERGE で反映INSERT・UPDATE・DELETE が1件ずつ、数秒〜数分で届く
バッチ(上)と CDC(下)の取り込みの流れ
バッチ(全件・差分)CDC
鮮度取る間隔しだい(1時間〜1日)数秒〜数分
業務 DB への負荷大きな SELECT が走る(レプリカから取るのが基本)ログを読むだけなので小さい
削除差分のバッチでは取れない削除のイベントとして届く
途中の変化取った時点の値だけ(間の変化は消える)変化を全部残せる
作りと運用簡単仕組みが複雑。遅延・ログの保持・スキーマ変更を監視
いつ使えるようになるか0時6時12時18時24時バッチストリームこの日の分は、日付が変わってからまとめて届く(最大で約1日遅れ)起きてすぐ届く(数秒〜数分)
バッチとストリームの届き方(1日の例)

CDC では、読んだ変更をいったん Kafka に流すことがよくあります。Kafka は、メッセージを順番に溜めておき、複数の受け手がそれぞれ自分のペースで読める仕組み(メッセージブローカー)です。DWH の側が止まっても変更は Kafka に残るので、あとから追いつけます。

Kafka の仕組み(トピック・パーティション・オフセット)

差分のバッチと削除の取りこぼし

CDC の仕組みと運用の注意

下の「ブラウザで試す」の図は CDC の流れです。アプリが DB を更新すると MySQL が binlog に書き、Debezium のコネクタが「レプリカのふり」をして binlog を読み、Kafka のトピックに送ります。シンクがそれを読んで DWH に主キーで MERGE するので、同じ変更が2回届いても結果は同じです。アプリには手を入れていない点と、コネクタもシンクもどこまで読んだかを記録しているので止まっても続きから再開できる点に注目してください。

面接ではこう答える

業務 DB からの取り込みは、決まった時刻に SELECT で全件か差分を取るバッチと、MySQL の binlog や PostgreSQL の WAL のような変更ログを読んで INSERT・UPDATE・DELETE を流す CDC に分かれます。バッチは作りが簡単ですが、鮮度は取る間隔しだいで、差分では削除や途中の変化を取りこぼします。CDC は数秒から数分の鮮度で削除も届き、業務 DB への負荷も小さい一方、仕組みが複雑で、遅れやログの保持の監視が要ります。

別のページで開く →

ネットワーク図を読み込んでいます…

ひとことで

前回より後に変わった行だけを updated_at などで取るバッチ。削除と、更新時刻を付け忘れた変更を取りこぼす。

差分のバッチは、updated_at の列で「前回より後に変わった行」を取るのが定番です。

前回の位置から少し重ねて取り、重なりは MERGE で吸収する9:0010:0011:00前回の実行9:50 まで取った今回はここから(10分重ねる)今回の実行10:55 まで
重ねて取った分は主キーの MERGE で1行になる
SELECT * FROM orders
WHERE updated_at >= :last_loaded_at - INTERVAL '10 minutes'  -- 少し重ねて取りこぼしを防ぐ
  AND updated_at <  :this_run_started_at;

取り込み側は主キーで MERGE して、重ねて取った分が重複しないようにします。

削除の取りこぼしが、差分のバッチの一番の弱点です。行が物理的に消されると、SELECT にはもう出てこないので、DWH には消えたはずの行が残り続けます。対策は次のどれかです。

  • 業務側を論理削除(deleted_at を入れる)にしてもらい、更新として取る
  • ときどき全件を取り直し、主キーの一覧を比べて、消えたものを削除する
  • CDC にする(削除がイベントとして届く)

ほかにも、アプリが updated_at を更新し忘れる経路(直接の SQL、一括更新)があると差分で取りこぼします。CDC ならこの問題は起きません。

取りこぼし原因対策
消えた行が DWH に残る物理削除は SELECT に出てこない論理削除・定期的な全件の突き合わせ・CDC
更新が取れないupdated_at を更新しない経路があるDB のトリガーや既定値で必ず更新する・CDC
境目の行が漏れる同じ時刻の行、長いトランザクションのコミットの遅れ前回の位置から少し重ねて取る

面接ではこう答える

差分のバッチは、updated_at の列で前回の実行より後に変わった行だけを取る方法です。境目の取りこぼしを防ぐために前回の位置から少し重ねて取り、重なった分は主キーの MERGE で1行にします。弱点は物理削除が取れないことと、updated_at を更新しない経路の変更を取りこぼすことで、論理削除にしてもらうか、ときどき全件と突き合わせるか、CDC にして対策します。

ひとことで

DB の変更ログを読み、変更1件ごとに前後の値を持つイベントとして流す。最初の全件のあとは変更だけを読み続ける。

CDC の道具は、DB の変更ログを読み、変更1件ごとにイベントを作ります。Debezium のイベントには、操作の種類(作成・更新・削除・スナップショット)と、変更の前の値と後の値が入ります。受け取る側は、主キーで MERGE して最新の状態を作るか、イベントをそのまま履歴として残します。

CDC は「最初の全件」から「変更の流れ」に切り替える業務 DBbinlog・WALログの保持期間に注意CDC の道具Debezium などスロット・位置を記録Kafka変更のイベント1件ずつ届くDWH・レイクMERGE で反映削除も反映
最初にスナップショットを取り、そのあとは変更のログを読み続ける

CDC の注意点

  • 最初に全件のスナップショットを取ってから、変更の流れに切り替える。
  • PostgreSQL では、読み手が止まるとレプリケーションスロットが WAL を消させず、ディスクを圧迫する。スロットの遅れを監視する。
  • MySQL では binlog を行単位(binlog_format=ROW)にし、読み終わる前に消えないだけの保持期間を取る。
見張るもの異常のとき起きること
読み取りの遅れDWH のデータが古くなる
PostgreSQL のスロットがためている WAL の量業務 DB のディスクがいっぱいになる
MySQL の binlog の保持期間と、読んだ位置読む前に消えると、全件を取り直すことになる
上流のスキーマ変更イベントの形が変わり、下流の変換が壊れる

面接ではこう答える

CDC は、MySQL の binlog や PostgreSQL の WAL のような変更ログを読み、変更1件ごとに操作の種類と前後の値を持つイベントを作ります。最初に全件のスナップショットを取ってから変更の流れに切り替え、受け取る側は主キーで MERGE して最新の状態を作ります。運用では、読み取りの遅れ、PostgreSQL のレプリケーションスロットがためる WAL、MySQL の binlog の保持期間を監視します。

広告・CRM・決済などの SaaS のデータは、API から取り込みます。取り込みサービス(コネクタ)があればまずそれを検討し、ない場合は自分で書きます。自分で書くときに気をつけることは決まっています。

API からの取り込みの流れ前回の時刻状態を保存updated_since などAPI を呼ぶページごと429 なら待って再試行生の JSONそのまま保存日付ごとのフォルダ整形型・列をそろえるstaging で
生のレスポンスを先に保存しておくと、整形をやり直せる
気をつけることやり方
ページング次のページの位置(カーソル)を受け取って最後まで読む。途中で落ちても続きから読めるようにする
回数の制限HTTP 429 が返ったら、Retry-After などの指示に従って待ってから再試行する
差分の取り方updated_since のような条件があれば使う。なければ期間を区切って取り直す
生のレスポンスの保存JSON をそのまま日付ごとに保存し、整形は別の段階で行う
認証情報API キーはコードに書かず、シークレットの管理の仕組みに置く
仕様の変化項目の追加・削除に備え、知らない項目があっても落ちないように読む

自分で書いたコネクタは、作るより保守のほうが重いのが普通です(API の版の変更、認証の期限切れ)。作るかサービスを使うかは、数と保守の人手で判断します。

ひとことで

アプリから送るイベントを、ID・名前・起きた時刻・届いた時刻・誰の・詳細の項目で設計して集める。

アプリや Web の行動ログ(画面の表示・タップ・購入)は、アプリから送られるイベントを集めて取り込みます。業務 DB と違ってあとから直せないので、送る前の設計が大事です。

アプリのイベントが DWH に届くまでアプリ・Webイベントを送る電波がないとためて送る収集の窓口受け取り・検証形の検証・時刻を付けるキューKafka など一時的にためるレイク・DWH日付で区切る重複は event_id で除く
イベントには「起きた時刻」と「届いた時刻」の両方を持たせる
項目意味ないと困ること
event_idイベントごとの一意の ID(アプリ側で作る)再送の重複を除けない
event_name何が起きたか(命名の規則を決める)同じ操作に別の名前が付き、集計が割れる
event_time端末で起きた時刻端末の時計がずれていても気づけない
received_atサーバーが受け取った時刻遅れて届いた量が測れない
user_id・session_id誰の、どの訪問かユーザー単位・訪問単位の分析ができない
properties画面名・商品 ID などの詳細「何を」が分からない

どのイベントを、どの名前と項目で送るかを表にしたトラッキングプランを、アプリの開発者・アナリストと一緒に作っておくと、名前の揺れや送り忘れを防げます。

面接ではこう答える

アプリのイベントログは、あとから直せないので送る前の設計が大事です。重複を除くための event_id、命名の規則を決めた event_name、端末で起きた時刻と、サーバーが受け取った時刻の両方を持たせます。どのイベントをどの名前と項目で送るかをトラッキングプランとして開発者やアナリストと決めておくと、名前の揺れや送り忘れを防げます。

ひとことで

何を測るかは PdM・アナリスト、送る実装は Web・App の開発者、集めてためる基盤はデータエンジニア、運用のログは SRE と開発者、という分担が一般的。

「ログの設計・実装はデータエンジニアの仕事か?」という質問への答えは、ログの種類と段階によって分かれるです。一般には、何を測るかを決めるのは PdM・アナリスト、コードに実装して送るのは Web・App の開発者、集めてためる基盤を作るのがデータエンジニア、という分担が多いです。運用のためのログ(エラー・アクセスログ)は SRE と開発者の受け持ちです。

ログは「決める・出す・集める・使う」で担当が分かれる1. 決める何を測る・残すかPdM・アナリスト(行動ログ)SRE・開発(運用のログ)セキュリティ(監査)2. 出す・送るコードに実装するWeb・App の開発者バックエンドの開発者(ログ・イベントを出す)3. 集める・ためる基盤を作って守るデータエンジニア(行動ログ → DWH)SRE(運用のログ → ログ基盤)4. 使う分析・監視・調査アナリスト・PdM(KPI・効果の検証)SRE・開発(障害の調査・アラート)会社によって線の位置は変わる。大事なのは、ログの種類ごとに「誰が決めて、誰が直すか」を決めておくこと
ログの4つの段階とおもな担当(一般的な分け方)
ログの種類何に使う出す(実装)集める・ためる
行動ログ(イベント)
画面の表示・タップ・購入
KPI・機能の効果・ファネル分析Web・App の開発者(項目は PdM・アナリストと決める)データエンジニア(取り込み → DWH)
アプリのログ
エラー・処理の記録
障害の調査・アラートバックエンド・Web・App の開発者SRE(ログ基盤・保持期間・費用)
アクセスログ
LB・CDN・Web サーバー
トラフィック・エラー率・攻撃の調査(機器・サービスが出す。設定は SRE)SRE。分析に使うなら DWH にも
監査ログ
誰がいつ何をしたか
不正の調査・監査への対応開発者(管理画面の操作など)・クラウドの機能SRE・セキュリティ(消せない場所に長く保管)
DB の変更(CDC)業務データの分析・連携(DB の変更ログを読む。DB の持ち主に連絡)データエンジニア
予測ログ(ML)モデルの監視・再学習ML エンジニア(推論のサービス)ML エンジニア・データエンジニア

データエンジニアが受け持つこと・受け持たないこと

受け持つことが多いほかの職種と一緒に・任せることが多い
取り込みの仕組み(収集の API・SDK・Kafka など)、DWH のテーブル、遅れ・重複・欠けの監視どのイベントを取るか(PdM・アナリスト)、画面のどこで送るか(Web・App の開発者)
イベントの共通の形(必須の項目・命名の規則)とスキーマの検証個人情報を送らない判断(法務・セキュリティと)
トラッキングプランの置き場所と、変更の流れ(レビュー)運用のログの基盤(SRE)

会社の規模によって分け方は変わります。

会社の状況よくある分け方気をつけること
スタートアップ(データ専任がいない)開発者が分析 SaaS(GA4・Firebase など)の SDK を入れ、PdM が画面で見る名前の揺れ・送り忘れ。早めにトラッキングプランを1枚作る
データエンジニアが数人開発者が送る・データエンジニアが取り込みと DWH・アナリストが集計「送ったのに数字がおかしい」の切り分けの窓口を決める
大きな会社(データ基盤チームがある)基盤チームが送る仕組み(SDK・スキーマの登録・検証)を提供し、各チームが自分のイベントを持つイベントの持ち主(どのチームが直すか)をカタログに書く

どの分け方でも、トラッキングプラン(イベントの名前・項目・送るタイミング・持ち主の一覧)を1か所に置き、変えるときはデータの側もレビューに入る流れにしておくと、「送る側が名前を変えて集計が割れた」事故を防げます(アプリのイベントログの集め方・データの持ち主と責任の分け方)。

面接ではこう答える

ログの設計と実装は、ログの種類と段階で担当が分かれると考えています。行動ログなら、何を測るかを PdM やアナリストが決め、Web やアプリの開発者が実装して送り、データエンジニアが取り込みと DWH、命名やスキーマの検証の仕組みを作ります。エラーやアクセスログのような運用のログは、開発者が出して SRE がログ基盤を持ちます。会社の規模で線は変わるので、トラッキングプランとイベントの持ち主を決めておくことが大事です。

取引先や他の部署とは、CSV などのファイルをオブジェクトストレージや SFTP に置いてもらう形で受け渡すことがよくあります。トラブルの多くは技術ではなく取り決めの不足から起きます。

ファイルの受け渡しの流れ相手が置くincoming/完了の印を待つ_SUCCESS など取り込むファイル名で記録退避するprocessed/
書きかけのファイルを読まないように、完了の印を待ってから読む
取り決めること理由
置く場所とファイル名の規則(日付を入れる)どれが新しいか、どの日の分かが分かる
書き終わった印(完了ファイル・件数を書いたファイル)書きかけを読まない。件数で抜けを確かめられる
文字コード・区切り文字・ヘッダー・日付の書き方読み込みで化ける・ずれる
同じ日の分を置き直すときの扱い二重に取り込まない(ファイル名で処理済みを記録)
届かなかったときの連絡先と期限何時まで待つか、誰に聞くか

取り込みの方式は「元が何か」と「どれくらい新しい必要があるか」でほぼ決まります。迷ったら、要件を満たす中でいちばん簡単な方式を選びます。鮮度を上げるほど、作りと運用の手間は増えます。

元日次〜毎時でよい数分以内が要る
業務 DBレプリカから差分のバッチ(削除は全件の突き合わせか論理削除)CDC
SaaS取り込みサービスか API のバッチWebhook を受けてキューへ(ある場合)
アプリのイベント収集の窓口からレイクへ、時間ごとにまとめてキュー(Kafka など)からストリーム処理
ファイル置かれたら取り込む(完了の印を見て)—(ファイルの受け渡しは鮮度が要る用途に向かない)

利用者が「リアルタイムがほしい」と言ったときは、その数字を見て何分以内に何をするのかを聞きます。翌朝に判断するなら日次で足ります。

ひとことで

上流のテーブルや項目が変わると下流が壊れる。互換性のルールとデータ契約で防ぐ。

上流のアプリが列の名前を変えた、型を文字から数値に変えた、列を消した――こうしたスキーマの変化は、データ基盤が壊れる原因の上位です。しかも上流のチームは下流で使われていることを知らないことが多くあります。

スキーマレジストリは、Kafka などに流すイベントの形(Avro・Protobuf・JSON Schema)を登録しておき、新しい形が古い形と互換かどうかを書き込みの前に確かめる仕組みです。互換でない変更は登録で弾かれるので、壊れたデータが流れ出しません。

互換性のモード意味許される変更の例
後方互換(BACKWARD)新しいスキーマで古いデータを読める既定値つきの項目の追加、項目の削除
前方互換(FORWARD)古いスキーマで新しいデータを読める項目の追加、既定値つきの項目の削除
完全互換(FULL)両方既定値つきの項目の追加・削除だけ

Confluent のスキーマレジストリでは、何も指定しなければ後方互換(BACKWARD)で確かめます。項目を消して互換を保てるのは、その項目に既定値があった(任意の項目だった)場合です。どのモードでも、名前の変更や型の変更は「追加して、移行して、古いほうを消す」の3段階に分けるのが安全です。

壊れる変更は「流れる前」に止める上流のアプリ列や項目を変更CI で契約を確認データ契約・型・必須レジストリで確認互換性のモード本番に流れる下流は壊れない互換でない変更(名前・型の変更、必須項目の追加)は ここで止まる→ 「追加して、移行して、古いほうを消す」の3段階に分ける
スキーマの変化を本番の前に止める流れ

データ契約

面接ではこう答える

上流のアプリが列の名前や型を変えると、下流のパイプラインが壊れます。Kafka などに流すイベントなら、スキーマレジストリに形を登録し、新しい形が古い形と互換かどうかを書き込みの前に確かめます。後方互換は新しいスキーマで古いデータを読めること、前方互換は古いスキーマで新しいデータを読めることです。名前や型の変更は、追加して、移行して、古いほうを消す3段階に分けます。

ひとことで

上流のチームと、出すデータの形・意味・品質・鮮度・変更の手順を約束し、機械でチェックできる形で残すこと。

データ契約(データコントラクト)は、上流のチームと「このテーブル・イベントは、この列・この型・この意味・この鮮度で出す」と約束し、それを機械でチェックできる形(YAML のスキーマや CI のテスト)で残すことです。上流の変更のプルリクエストで契約のチェックが落ちれば、本番に出る前に気づけます。技術だけでなく、「変えるときは何日前に知らせる」「誰が持ち主か」を決めておくことが本体です。

データ契約に書くこと形列・型・必須かどうか意味各列の定義・単位・とり得る値品質一意・NULL の割合・件数の目安鮮度何時までに、どの間隔で出すか持ち主と変更の手順誰が責任者か、何日前に知らせるか
機械でチェックできる部分は CI に入れ、上流の変更で落ちるようにする

最初から全部のテーブルに結ぶ必要はありません。壊れたときの影響が大きいもの(売上・請求に使う注文のテーブルなど)から始めます。

面接ではこう答える

データ契約は、上流のチームと「このテーブルやイベントは、この列・型・意味・鮮度で出す」と約束し、それをスキーマのファイルや CI のテストなど機械でチェックできる形で残すことです。上流の変更のプルリクエストでチェックが落ちれば、本番に出る前に気づけます。ただ本体は技術より運用で、持ち主を決め、変えるときは何日前に知らせるかを決めておくことです。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • バッチと CDC の使い分けと、差分の取りこぼし
  • API・イベント・ファイルからの取り込みの決まりごと
  • スキーマの変化とデータ契約

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1CDC の利点と注意点は?

模範回答

利点は3つです。DB の変更ログを読むのでデータが数秒〜数分で届くこと、大きな SELECT を流さないので業務 DB への負荷が小さいこと、そして差分のバッチでは取れない削除や途中の変化もイベントとして取れることです。

注意点は運用です。PostgreSQL ならレプリケーションスロット、MySQL なら binlog の保持期間に依存するので、読み手が止まると WAL がたまってディスクを圧迫したり、逆にログが先に消えて取りこぼしたりします。遅延(ラグ)とスロットの状態を監視し、取りこぼしたときに全件のスナップショットから取り直す手順を用意しておきます。また上流のスキーマ変更がそのまま流れてくるので、互換性のチェックや、受け取る側の冪等な MERGE も必要です。

深掘りされたら

  • CDC で届いたイベントを DWH にどう反映しますか?
  • 最初の全件取り込みと変更の流れをどうつなぎますか?

見られているポイント鮮度・負荷・削除と、運用(遅延・スロット)

Q2差分のバッチで取り込んでいると、どんな問題が起きますか?

模範回答

一番大きいのは、物理的に削除された行を取りこぼすことです。updated_at で「前回より後に変わった行」を取る方式では、消えた行はもう SELECT に出てこないので、DWH には消えたはずの行が残り続けます。ほかにも、アプリが updated_at を更新し忘れる経路(直接の SQL や一括更新)があると、変更自体を取りこぼします。

対策は、業務側を論理削除にしてもらう、ときどき全件を取り直して主キーの一覧を比べる、CDC に切り替える、のどれかです。また、取る範囲を前回と少し重ねて取り、取り込み側で主キーの MERGE をして重複を吸収するのも基本です。

深掘りされたら

  • 全件の取り直しが重いときは、どうしますか?

見られているポイント削除と更新漏れという差分方式の弱点

Q3上流のチームが列の名前を変えて、パイプラインが壊れました。再発を防ぐには?

模範回答

まず目の前の対応として、下流の staging で新しい列名に合わせて直し、壊れていた期間をバックフィルで作り直します。そのうえで再発防止として、上流のチームとデータ契約を結び、「どのテーブル・列を、どの型と意味で出すか」を機械でチェックできる形にして、上流の CI に入れてもらいます。

イベントならスキーマレジストリで互換性のチェックをかけ、互換でない変更は書き込みの前に弾きます。名前や型を変えたいときは「新しい列を足す → 下流を移す → 古い列を消す」の3段階に分けるルールにします。技術だけでなく、変更を何日前に知らせるか、誰が持ち主かを決めておくことが一番効きます。

深掘りされたら

  • 上流のチームが協力的でないときは?

見られているポイント目の前の復旧と、仕組み・合意での再発防止

Q4アプリの行動ログを集める仕組みを作るとき、イベントにどんな項目を持たせますか?

模範回答

重複を除くための event_id、命名の規則を決めた event_name、端末で起きた時刻と、サーバーが受け取った時刻の両方、user_id と session_id、画面名などの詳細を入れる properties を持たせます。

時刻を2つ持つのは、端末の時計がずれていたり、電波がない間ためて送られたりするからです。届いた時刻があれば、どれくらい遅れて届くかを測って、集計をさかのぼる日数を決められます。また、送る前にトラッキングプランを開発者やアナリストと決め、名前の揺れや送り忘れを防ぎます。

深掘りされたら

  • イベントの名前の付け方の規則はどう決めますか?
  • 送られてきたイベントの形が壊れていたらどうしますか?

見られているポイントあとから直せないデータを、送る前に設計できるか

Q5利用者から「売上をリアルタイムで見たい」と言われました。どう進めますか?

模範回答

まずその数字を見て、何分以内に何をするのかを聞きます。たとえばセール中に在庫の補充や広告の停止を判断するなら数分の鮮度に意味がありますが、翌朝の会議で見るなら日次で足ります。

本当に数分が要るなら、注文 DB から CDC で取り込み、必要な指標だけをストリームか短い間隔のバッチで集計します。そのとき、作りと運用の手間、コスト、確定前の数字(あとでキャンセルされる注文)を含むことを説明し、確定の数字は日次のバッチで別に出す、という形で合意することが多いです。

深掘りされたら

  • 毎時の更新で妥協してもらうには、どう説明しますか?

見られているポイント要件を鮮度の理由から確かめ、いちばん簡単な方式を選べるか

Q6アプリの行動ログの設計と実装は、誰がどこまで担当するべきだと考えますか?

模範回答

段階で分けて考えます。何を測るかは、指標の定義から逆算して PdM やアナリストが決めます。画面のどこでどのイベントを送るかの実装は、Web やアプリの開発者です。データエンジニアは、取り込みの仕組みと DWH のテーブル、イベントの共通の形と命名の規則、スキーマの検証や遅れ・欠けの監視を受け持ちます。

例えば、トラッキングプランを1か所に置いて、イベントを足す・変えるときはデータの側もレビューに入る流れを作ります。会社が小さいうちは開発者が分析 SaaS を直接入れることも多いので、早めに命名の規則と持ち主を決めて、後で DWH に移しやすくしておきます。

深掘りされたら

  • 送る側がイベント名を変えて集計が割れたら、どう防ぎますか?
  • 個人情報を送らないようにするには、どこで止めますか?

見られているポイントログの種類・段階ごとに担当を整理できるか。トラッキングプランやスキーマの検証など、職種をまたぐ仕組みで事故を防ぐ発想があるか。