分析和ETL流水线
(部分: 技术和基础设施)
简短摘要
分析流水线将iGaming的"原始"操作事件(投注,存款,PSP webhooks,游戏逻辑)转换为稳定的指标展示(GGR/NGR,LTV,重组,反欺诈信号)。基准:单层模型(Bronze/Silver/Gold),DQ/线性工具学科,增量和幂等,可观察性和SLO,成本控制。决策考虑了负载配置文件(锦标赛高峰),监管性(PII/本地化)以及企业对数据新鲜度的要求。
1)体系结构: ETL vs ELT, batch vs stream
ETL (Extract → Transform → Load):转换为DWH。适用于需要在"云"之前控制环境/秘密的转换。
ELT (Extract → Load → Transform): Lake/Lakehouse/DWH的原材料,以下是SQL/引擎 (dbt/SQL脚本)。适用于柱式引擎和灵活的迭代。
Batch:计划窗口(每5/15/60分钟,夜间)。便宜且可预测。
Stream: почти real-time (Kafka → Flink/ksqlDB → OLAP).用于近实时(5-60秒)陈列柜和防冻剂/CRM信号。
溷合动力车:青铜充满了串流,Silver/Gold是增量击球模型。
建议:在iGaming中保持ELT+流媒体:通过CDC/outbox → Bronze(分钟新鲜度)的活动,在Silver/Gold中进行增量转换。
2)分层模型(Medallion)
青铜(Raw): 原始事件/CDC没有业务逻辑。Parquet/ORC格式,原样模式,最小验证。
Silver(匹配):清洗、重复数据消除、ID归一化、SCD测量、货币/时区统一。
黄金(Marts):商业展示(事实/测量,立方体),材料化观点,预聚会(天/国家/产品)。
优点:可重复性、透明进化、不同层的SLO和TTL。
3)来源和装载: CDC, outbox,文件
CDC (Change Data Capture):来自OLTP (Postgres/MySQL)的更改流,具有顺序和等效性保证。
Outbox模式:事件记录在服务事务的outbox表/集合中→连接器发布到总线/湖泊。
文件下载:PSP卸载,合作伙伴报告;使用清单,双重控制(checksum)和接收目录。
实践:对每个来源的资源进行验证(计划版本),对每个来源进行现场合同和质量期望。
4)管弦乐队: DAG,成瘾,deploy
DAGi:显式依赖关系(raw → staging → dims → facts → marts)。
任务的相等性:重新启动而不会产生副作用(partition-overwrite,"MERGE"/upsert)。
环境分离:Dev/Stage/Prod,人工制品促销活动,"手动门"(manual approval),用于昂贵的背景。
计划:cron/时间窗口+事件触发器(按文件/批次到来)。
秘密:来自秘密经理;禁止DAG代码中的秘密。
python with DAG("dwh_daily", schedule="0 ") as dag:
bronze = ingest_cdc(source="payments", partition=hour())
silver = dedup_normalize(input=bronze)
dims = build_dimensions(input=silver)
facts = build_facts(input=silver, dims=dims)
marts = build_marts(input=facts)
bronze >> silver >> [dims, facts] >> marts
5)数据质量(DQ)和线性
DQ支票:完整性(计数,后期武器),密钥唯一性,范围/域规则(总和≥ 0,参考书中的货币)。
触发阈值:硬停止/软失效,根据表的关键性而定。
线性/目录:从复制到源(表、列、度量标准),所有者,文档,PII分类。
电路控制:自动兼容性测试(backward -/forward-compatible),alert to"打破"更改。
6)建模: SCD,surrogate键,正常化
测量SCD2: "valid_from/valid_to/is_current"、surrogate key ('_sk')和natural key ('_id')。
SCD1:覆盖非必要属性(例如接口区域)。
Surrogate keys:稳定的'_sk' for join, natural keys for独特。
测量标准化:在层次结构深度较深的地方snowflake;换句话说,星星是为了速度。
7)增量模型和分组
水印("updated_at","ingest_ts"):仅读取新/更改的行。
增量策略:业务密钥上的"MERGE",批次上的"INSERT OVERWRITE",小批次的"DELETE+INSERT"。
参与:按日期/小时/地区分列;聚类(sort keys/Z-order)通过过滤和加入密钥。
实例化视图:GGR/NGR预聚合,流行截面的缓存。
Approx装置:便宜的top-N店面HLL/approx_distinct。
sql
MERGE INTO fact_deposits f
USING staging_deposits s
ON (f. deposit_id = s. deposit_id)
WHEN MATCHED THEN UPDATE SET amount = s. amount, status = s. status, updated_at = s. updated_at
WHEN NOT MATCHED THEN INSERT (...)
VALUES (...);
8)Backfill,重建和历史管理
Backfill:具有资源限制和窗口的单个DAGi;明确的"真相之窗"(例如2024-01-01..2025-11-05)。
重构:确定性变换→重复运行产生相同的结果。编译模型代码版本。
时间旅行/表版本:方便调查和DR"逻辑错误"。
Retraction:具有协议的数据反馈(删除/修复)策略。
9) CLO/SLA/SLO输送机
新鲜(freshness): Bronze ≤ 1-5分钟,Silver ≤ 15分钟,Gold ≤ 60分钟(示例)。
可靠性: DAG ≥ 99成功运行百分比。x%.
性能:节点持续时间p95/p99;每党的时间预算。
Lag监视:ingest流积压,队列深度,"late data"份额。
Alerts:新鲜/体积中断,DQ fails,扫描成本上升,MV降解。
10)成本: 预测和优化
聚会和集群将扫描量最小化。
热标记的实现(天/国家/产品)。
常用行车记录板的结果缓存/MVs。
控制重新启动的频率(没有"每5分钟"没有理由)。
TTL:青铜的激进重构,中银色,长金(仅单位)。
能力规划:目录指标,比赛/活动高峰预测。
11)安全、PII和本地化
数据分类:PII/财务/运营。
加密:静止和过境;KMS/基于角色的访问。
标识:散列/掩码,单独的键列。
RLS/vyuhi用于多影子(通过"tenant_id")。
本地化:按区域划分的储存和处理区(欧盟/TR/LATAM);仅导出到允许的位置。
审核:读取/写入关键表,访问目录。
12)可观察性: 度量,标志,步道
流水线度量:任务持续时间、队列、错误、转发、处理字节/行量、成本。
Logs:结构化;"trace_id"/"run_id"上的相关性。
Tracing:从源到店面(ingest → transform → load → BI)。
Dashbords:层的新鲜度,DAG的成功,最昂贵的查询,p95/p99。
13)工具(角色参考)
编排:DAG编排器(带有调度器,后台,警报器,秘密)。
转换:SQL建模("模型作为代码"),单位模型测试,文档。
DQ/合同:检查框架和数据集的SLA。
线性/目录:自动生成约束图,搜索所有者。
流媒体:窗口/聚合处理器,sink/source连接器。
(根据公司的堆栈和安全要求选择特定的供应商。)
14)模式示例
GGR店面模板(广义SQL)
sql
CREATE OR REPLACE TABLE mart_ggr_daily AS
SELECT
DATE(b. ts) AS d,
c. country_code,
SUM(b. stake) AS stake_sum,
SUM(b. win) AS win_sum,
SUM(b. stake - b. win) AS ggr
FROM fact_bets b
JOIN dim_country c ON c. country_sk = b. country_sk AND c. is_current
WHERE b. ts >= DATE_SUB(CURRENT_DATE, INTERVAL 60 DAY)
GROUP BY d, c. country_code;
带有"水印"的增量模型"
sql
INSERT INTO fact_bets PARTITION (dt)
SELECT
FROM staging_bets
WHERE updated_at > (SELECT COALESCE(MAX(watermark), '1970-01-01') FROM _meta_watermarks WHERE table='fact_bets');
-- then update watermark
DQ检查(想法)
sql
-- 1) key uniqueness
SELECT deposit_id FROM fact_deposits GROUP BY deposit_id HAVING COUNT()>1;
-- 2) negative amounts (error)
SELECT FROM fact_deposits WHERE amount < 0;
15)实施支票
1.定义指标字典(GGR/NGR/LTV/Retention)和所有者。
2.在Bronze/Silver/Gold层中记录SLO的新鲜度。
3.标准化来源合同(方桉、DQ、SLA)。
4.构造DAG图,具有相等的步骤和孤立的秘密。
5.实现增量(按批次排列的MERGE/overwrite)和"水印"。
6.启用DQ(关键/软检查)、lineage和数据目录。
7.配置可观察性(度量、日志、跟踪)和Alerta。
8.键入转发/TTL和backfill/转发策略。
9.提供PII控制、加密、RLS和本地化。
10.进行游戏日:模拟源的下降,"打破"电路,质量回火。
16)反模式
"每人一晚ETL",没有分期付款和增量。
缺少DQ和lineage →矛盾的报告和"捉鬼敢死队"。
每次启动时完全重新设计表(成本爆炸)。
实时硬韧带,无缓冲区/后退。
将PII和公共展示柜混合在一起,无需细分或掩盖。
没有撤回/删除策略(无法纠正错误)。
结果
iGaming中的可持续分析管道是ELT+流式下载到具有刚性DQ/线性,增量模型,透明编排器和可测量SLO的分层模型中。添加成本控制、PII/本地化策略、定期的背景调查/DR演习-您的分析平台将可靠地扩展到锦标赛高峰,为企业提供所需的新鲜度和质量数据。