データレイクとフローアグリゲーション
1)目的と価値
Data Lake/Lakehouse-長期保管と大規模な読み取りの参照層:- 製品/ゲーム/支払いからストリームはブロンズの土地「そのまま」。
- 銀は正常化し、豊かになり、一貫したキーおよび質を提供します。
- 金-BI、レギュレータ、不正防止/RG用の集約ショーケース(リアルタイム/ニアリアルタイムを含む)。
Lakehouseの収量に対するフローの集約:低いレポートのレイテンシ、予測可能なコスト、再現性、およびフォレンジック。
2)リファレンスアーキテクチャ
1.Ingest/Edge: HTTP/gRPC、 OTel、バッチエンドポイント→Kafka/Redpanda。
2.ブロンズ(追加のみ):オブジェクトストレージ+ACIDテーブル(デルタ/アイスバーグ/フーディ)、日付/市場/テナントによるパーティション;元のペイロードの貯蔵。
3.ストリームコンピューティング:Flink/Spark/Beam-ウィンドウユニット、CEP、デッドアップ、オンラインルックアップ。
4.銀(クリーン/適合):通貨正規化/タイムゾーン、FK/ディレクトリ、測定のためのSCD。
5.サービング/OLAP: ClickHouse/Pinot/Druid-パネルの分単位/秒単位の集計を実現しました。
6.金(サーブ):毎日/1時間のディスプレイケース、規制スライス、不変輸出パッケージ(WORM)。
7.コントロールループ:スキーマレジストリ、DQ-as-code、 lineage、ディレクトリ、secrets/KMS、 RBAC/ABAC。
3)契約とスキーム
スキーマファースト:JSON/Avro/Protobuf;必須フィールドは'event_time (UTC)'、 'event_id'、 'trace_id'、 'user_pseudo_id'、 'market'、 'schema_version'です。
進化:バックコンパチブル→nullableを追加;breaking→'/v2'+ダブルエントリ。
ディレクトリ:ドメインの説明、所有者、新鮮なSLA、 DQルール、系統。
4)湖への着陸ストリーム
一番下の正確に1回:少なくとも1回のパブリケーション+idempotentシンク(MERGE/upsert by 'event_id')。
Dedup: stateful in stream+uniqueness in Silver。
ファイル圧縮:小さなファイル→読み取りとコストのための通常のOPTIMIZE/VACUUM。
タイムトラベル:デバッグ、リプレイ、監査が含まれます。
sql
CREATE TABLE bronze. payment_events (
event_id STRING, user_pseudo_id STRING, currency STRING,
amount DECIMAL(18,2), market STRING, event_time TIMESTAMP, payload STRING
)
PARTITIONED BY (days(event_time), market);
5)ストリームアグリゲーション: ウィンドウと透かし
Windows:- タンブリング-固定(例:安定したパネルのための1分/5分)。
- ホッピング-「スムーズ」メトリックのオーバーラップ(ステップ<ウィンドウ)。
- セッション-非アクティブの行動ギャップ。
- 透かし:遅延データ制御(通常2〜5分)、事前発行/修正ルール。
sql
SELECT market,
TUMBLE_START(event_time, INTERVAL '1' MINUTE) AS ts_min,
COUNT() AS deposits_1m,
SUM(amount_base) AS sum_1m
FROM silver. payments
GROUP BY market, TUMBLE(event_time, INTERVAL '1' MINUTE);
6)集計の具体化
OLAPエンジン(ClickHouse/Pinot/Druid):ダッシュボードと運用分析の分単位/秒単位を格納します。
Lakehouse Gold:レポートと和解(再現性)のための毎日/時間スライスを保持します。
sql
CREATE MATERIALIZED VIEW mv_ggr_1m
ENGINE = AggregatingMergeTree()
PARTITION BY toDate(event_time)
ORDER BY (toStartOfMinute(event_time), market, provider_id) AS
SELECT toStartOfMinute(event_time) AS ts_min,
market,
provider_id,
sumState(stake_base) AS s_stake,
sumState(payout_base) AS s_payout
FROM stream. game_events
GROUP BY ts_min, market, provider_id;
ゴールドデイスライス(レイクハウス):
sql
CREATE OR REPLACE VIEW gold. ggr_daily AS
SELECT
DATE(event_time) AS event_date,
market, provider_id,
SUM(stake_base) AS stakes_eur,
SUM(payout_base) AS payouts_eur,
SUM(stake_base) - SUM(payout_base) AS ggr_eur
FROM silver. fact_game_financials
GROUP BY 1,2,3;
7)銀: 正常化および和解
時間と通貨:'event_time (UTC)'、 'amount_base'、 'fx_rate_used'、 'fx_source'。
キー/ディレクトリ:'user_pseudo_id'、 'game_id'、 'provider_id'、 'market'。
SCD II:寸法履歴(ユーザー/ゲーム/プロバイダ/RG/KYC)。
DQルール:キー一意性、ディレクトリ、金額範囲、時間的妥当性。
8)単位の登録と「正しい」定義
セマンティックレイヤー:均一なGGR/NGR数式、賭け/勝利、変換、ARPPU、レイテンシp95。
バージョン管理メトリック:'metric_version'および「as-of」計算。
Dockcards:所有者、数式、ソース、SLA準備状況。
9)正確に一度/idempotencyおよび順序
バス:少なくとも1回+パーティショニング(ローカルオーダー)。
処理:'event_id' (TTL 24-72h)、 CEP/ウィンドウ演算子による調整。
シンク:トランザクションコミットまたはidempotent upsert/merge。
Outbox/Inbox:保証付きでOLTPからドメインイベントを発行します。
10)遅延データと調整
許容遅延:操作ディスプレイのための2-5分;ゴールドのための毎日の再構成。
修正:OLAPの追加排出量とゴールドの再サンプリング(idempotent)。
フラグ: 'late=true'、 'correction_of=
11)観察可能性およびDQ
SLI/SLO(ランドマーク):- p95インジェスト→1分ショーケース≤ 2-5秒;金は毎日06:00ロックまで準備ができています。
- 完全性≥ 99。5%;スキーマの有効性≥ 99です。9%;追跡カバレッジ≥ 98%。
- パイプラインメトリクス:遅延/スループット/ビジータイム/ステートサイズ、遅延比、ダップレート。
- DQ-dashboards:鮮度/完全性/有効性、損失漏斗、ホットキーカード。
- 血統:ブロンズからゴールド/輸出への道。変化に対する影響分析。
12)プライバシー、居住、セキュリティ
PII最小化:匿名化、個別の保護マッピング。
レジデンシー:EEA/UK/BR-別々のディレクトリと暗号化キー。理由なくクロスリージョナルジョインを禁止します。
暗号化:TLS in-transit;KMS/CMK at-rest;スロットリング時に署名+WORMをエクスポートします。
DSAR/RTBF/Legal Hold:選択的編集、削除フリーズ、監査済みアクセス。
13)性能および費用
仕切り:日付/市場/テナントによって;頻繁にフィルタされる属性によるクラスタリング/Z順序。
圧縮:小さいファイル除去、規則的なOPTIMIZE/VACUUM。
具体化:分/秒-OLAP;日/時間-ゴールドで。
階層型ストレージ:ホット/ウォーム/コールド、SLAリカバリ、コマンドによるチャージバック(コスト/GB、コスト/クエリ)。
事前集計/スケッチ:HyperLogLog/approx-distinct。
14)例(断片)
Flink CEP-預金構造(10分):python if count_deposits(window=10MIN) >= 3 \
and sum_deposits(window=10MIN) > THRESH \
and all(d. amount < REPORTING_LIMIT for d in window_events):
emit_alert("AML_STRUCTURING", user_id, snapshot())
SQL-Silverにロードされた場合のdedup:
sql
CREATE TABLE silver. payments AS
SELECT EXCEPT(rn) FROM (
SELECT p., ROW_NUMBER() OVER (PARTITION BY event_id ORDER BY event_time) rn
FROM bronze. payment_events p
) WHERE rn = 1;
アイスバーグ/デルタ-MERGE idempotent:
sql
MERGE INTO silver. fact_bets s
USING stage. fact_bets_delta d
ON s. bet_id = d. bet_id
WHEN MATCHED THEN UPDATE SET
WHEN NOT MATCHED THEN INSERT;
15)プロセスとRACI
R(責任がある):- データプラットフォーム(Lakehouse/catalog/ACID、 compaction)、
- ストリーミング(ユニット/CEP/dedup)、
- ドメイン分析(メトリック/ゴールド)。
- A(説明責任):データ/CDOの責任者。
- C(コンサルティング):コンプライアンス/リーガル/DPO (PII/レジデンシー/リーガルホールド)、ファイナンス(FX/GGR)、 SRE (SLO/стоимость)、セキュリティ。
- I(インフォームド):BI/製品/マーケティング/オペレーション。
16)実装ロードマップ
MVP (3-5週):1.レイクハウスブロンズ/シルバー(ACIDテーブル)、カフカから摂取、レジストリスキーム。
2.OLAPの基本的なストリーム単位(1-5分);ショーケースゴールド。ggr_daily (D+1まで06:00)。
3.支払い/ゲームプレイ、鮮度/完全性ダッシュボードのためのDQ-as-code。
4.Compaction/OPTIMIZE、最小コスト指標、遅延/遅延/dupアラート。
フェーズ2(5-10週間):- シルバーエクステンション(ユーザー/ゲーム/プロバイダー向けSCD II)、系統およびインパクト分析。
- 非同期検索(RG/KYC/ASN/BIN)、遅延補正制御。
- 指標のセマンティック層、輸出規制(WORM/署名)。
- マルチリージョン、DR/リプレイシミュレータ、自動チューニングウィンドウと透かし。
- コスト・ダッシュボード、チャージバック/クォータ、階層型ストレージ、アーカイブ。
- ショーケースのドキュメントとメトリックカードの自動生成。
17)売り上げ前のチェックリスト
- レジスタ内のスキームと契約;バックコンパットテストは緑色です。
- Dedup、透かし/許可された遅延、DLQが含まれています。
- /OPTIMIZE/VACUUMは予定通り設定されています。
- SLO: P95 ingest→minute-view、 Gold-06:00;アラートの遅延/遅延/dup/ステートサイズ。
- DQルールはアクティブです。血統は青銅から輸出に見える。
- RBAC/ABACのKMS;residencyおよびDSAR/RTBF/Legal Holdテスト済み。
- 制御下のコスト(コスト/GB、コスト/クエリ、コールドシェア)、リプレイの制限。
18)アンチパターンとリスク
同じテーブル内の生データとレポートされたデータの混合:再現性に違反します。
圧縮の欠如:小さなファイル爆発→高価な要求。
FXの計算「retroactively」:履歴とレポートを破ります。
透かし/遅延ポリシーなし:ストアフロントとアラート「float」。
不必要にフル・リロード:use/MERGEインクリメントと調整。
AnalyticsのPII:マッピングを分離したまま、CLS/RLSを有効にします。
19)用語集(短い)
Lakehouse-データレイク+ACIDテーブルとSQLエンジン。
ブロンズ/シルバー/ゴールド-生/正規化/サービングレイヤー。
透かし-イベントタイムによるウィンドウ準備制限。
Materialized Viewは、高速読み取りのための事前に計算されたショーケースです。
タイムトラベル-テーブルの歴史的なバージョンを読む。
WORM-エクスポートアーティファクトの不変のストレージ。
20)ボトムライン
適切なストリームアグリゲーションを持つデータレイクは、レイヤーと契約の規律です。ブロンズ「そのまま」、正規化と品質のためのシルバー、分のパネルのOLAP、再現可能なレポートのためのゴールド。ウィンドウと透かしの管理、重複排除と圧縮、プライバシーとコスト、製品、コンプライアンス、運用管理のための迅速で検証可能で準拠したストアフロントが得られます。