ETL/ELT过程
1)目的和上下文
ETL/ELT流水线为报告(GGR/NGR,调节器),分析/ML和操作面板提供可预测的加载,转换和发布数据。
ETL:在DWH/Lakehouse中转换为下载(在现代堆栈中较少见)。
ELT:首先装载到Lakehouse (Bronze/Silver),然后使用SQL/引擎进行转换(推荐)。
2)参考体系结构
1.Ingest/Edge:HTTP/gRPC/Batch,OLTP的CDC,上载S3/FTP提供商。
2.青铜(raw, append-only):不变的付费,按日期/市场/tenant分期付款。
3.Silver (clean/conform):正常化、演绎、参考、SCD、FX/时间段。
4.黄金(serve): BI/调节/模型下的非正规店面。
5.编排:Airflow/Dagster/Prefect(DAG'i,SLA,retrai,移位)。
6.DQ/Contracts: Schema Registry + DQ-как-код, consumer-driven tests.
7.可观察性:piplines,lineage,logi,cost-dashbords的度量。
3)选择ETL vs ELT
练习:在iGaming-ELT+CDC中:快速装载,然后标准化并计算。
4)Increments和CDC
三角洲的方法:- CDC (Debezium/log复制):将OLTP →青铜→ MERGE更改为Silver。
- Watermark按时间:'updated_at> max_loaded_ts'。
- Hash-diff:比较更改检测器的"md5 (row)"。
- Upsert/MERGE:下载的平均值。
sql
MERGE INTO silver. payments s
USING stage. payments_delta d
ON s. transaction_id = d. transaction_id
WHEN MATCHED THEN UPDATE SET
WHEN NOT MATCHED THEN INSERT;
5)合同和计划
Schema-first:Registry中的JSON/Avro/Protobuf;事件/文件中的"schema_version"。
演变:可匹配(不可分割的添加);破解-"/v2"+双重记录。
必填字段:'event_time (UTC)'、'event_id'、'trace_id'、'user_pseudo_id'、'market'。
6) DQ编码(最低设置)
yaml table: silver. payments owner: data-payments slo:
freshness_minutes: 15 completeness_percent: 99. 5 rules:
- name: unique_tx # uniqueness of transactions type: unique columns: [transaction_id]
severity: critical
- name: currency_whitelist type: in_set column: currency set: [EUR,USD,GBP,TRY,BRL]
severity: major
- name: amount_positive type: range column: amount_base min: 0. 01 severity: critical
- name: fk_user type: foreign_key column: user_pseudo_id ref_table: dim. users_scd severity: critical
7)乐团: DAG'i,成瘾,SLA
DAG设计:从源头到橱窗;任务之间的显式依赖关系。
Retrai和等效性:backoff,"干净"的重复,checkpoint's。
移位(catchup):错过时间的整齐的追赶。
SLA:例如,黄金。每日准备到当地时间06:00;违规警报。
参数化:市场/tenant/日期通过 vars;一个单一的工作模式。
8)异位性和异位性
在ingest上:可以通过"(→,source)"来event_id重复。
在处理中:upsert/merge;"纯"变换函数。
在sink中:事务性公文或idempotent写作;"双重核算"控制。
Outbox/Inbox:从OLTP对域事件进行事务性发布。
9) Backfill и reprocessing
Backfill:主要填充/历史范围。
Reprocessing:在逻辑/修补程序更改时重新计算。
Guardrails:范围限制,配额,时间窗口,dry-run与度量比较。
标记:"logic_version","reprocessed_at","recalc_reason"。
10)Silver/Gold建模
Silver(3NF/BCNF):事实'fact_bets/payments/payouts',测量'dim_users/games/providers/markets(SCD II)',货币标准化/时间区。
黄金:BI/调节/模型下的非正规店面;不可更改的出口包(WORM)+签名。
黄金示例: GGR日报
sql
CREATE OR REPLACE VIEW gold. ggr_daily AS
SELECT
DATE(b. event_time) AS event_date,
b. market,
g. provider_id,
SUM(b. stake_base) AS stakes_eur,
SUM(p. amount_base) AS payouts_eur,
SUM(b. stake_base) - SUM(p. amount_base) AS ggr_eur
FROM silver. fact_bets b
LEFT JOIN silver. fact_payouts p
ON p. user_pseudo_id = b. user_pseudo_id
AND p. game_id = b. game_id
AND DATE(p. event_time) = DATE(b. event_time)
JOIN dim. games g ON g. game_id = b. game_id
GROUP BY 1,2,3;
11)隐私和居留权
PII最小化:令牌化;在隔离电路中模彷真实的ID。
RLS/CLS:角色/司法管辖区的访问策略,掩盖。
住宅:EEA/UK/BR的单独目录/密钥;无故禁止跨区域合作。
DSAR/RTBF&Legal Hold:选择性编辑、报告WORM存档、出口审核。
12)可观察性和SLO
SLI/SLO基准:- Freshness Silver p95 ≤ 15分钟;黄金日报准备到06:00 lock。时间。
- Completeness ≥ 99.5%,Validity(方桉)≥ 99。9%.
- Job 's的成功率≥ 99。0%,MTTR事件≤ 24-48小时。
Dashbords:Freshness heatmap,DQ损失漏斗,成本/查询和成本/GB,线性图。
13)生产力和成本
参与:日期/市场/特南特;通过过滤器聚类/Z顺序。
格式:Parquet+ACID(Delta/Iceberg/Hudi),压缩和统计。
复合:与小文件作斗争(OPTIMIZE/VACUUM)。
实物化:稳定单元;避免巨型飞跃。
Chargeback:预算,反冲配额/反冲配额;调度到低负载窗口。
14)典型的DAG任务示例(Airflow伪代码)
python with DAG("elt_payments_daily", schedule="@daily", start_date=..., catchup=True) as dag:
extract = BashOperator(task_id="extract_cdc", bash_command="run_cdc_to_bronze. sh {{ ds }}")
load = BashOperator(task_id="load_to_silver", bash_command="sql/run_merge_silver. sql {{ ds }}")
dq = BashOperator(task_id="dq_checks", bash_command="dq/run_checks. sh silver. payments {{ ds }}")
gold = BashOperator(task_id="build_gold_ggr", bash_command="sql/build_gold_ggr. sql {{ ds }}")
export = BashOperator(task_id="export_regulator", bash_command="export/run_worm_pack. sh {{ ds }}")
extract >> load >> dq >> gold >> export
15)流程和RACI
R(响应):数据工程(DAG'i,Silver/Gold模型),数据平台(infra,Registry,DQ)。
A (Accountable): Head of Data/CDO.
C (Consulted): Compliance/Legal/DPO (PII/residency/Legal Hold), Finance (FX/GGR), Risk (RG/AML), SRE (SLO/стоимость).
I (Informed): BI/产品/营销/运营。
16)实施路线图
MVP(3-5周):1.湖畔青铜/银色(ACID)+Payments/Gameplay的CDC/镶嵌物。
2.DQ编码(10-15个规则)和基本的Freshness/Completeness dashbords。
3.第一个金色展示(GGR Daily)带有SLA"直到06:00",带有签名的WORM导出。
4.在SLA/DQ上编排DAG和Alerta。
第二阶段(5-10周):- 域扩展,users/games/providers的SCD II。
- 语义层度量;线性/影响分析;backfill/reprocessing过程。
- 区域化(EEA/UK),RLS/CLS,成本控制(配额/滞后)。
- 重复模拟器(what-if),自动生成店面/度量文档。
- 成本优化(聚类,实现,TTL,复合)。
- DR演习和时间旅行恢复。
17)售前支票清单
- Registry中的合同/计划,兼容性测试为绿色。
- CDC/increments和MERGE是幂等的;在ingest上的恶作剧。
- DQ规则是活动的(critical → fail+DLQ), SLA-dashbords是自定义的。
- 金色店面已记录下来,语义层中的度量公式。
- RBAC/ABAC,加密,驻留,DSAR/RTBF/Legal Hold验证。
- 合并/OPTIMIZE/VACUUM时间表;backfill/replay限制。
- Runbook'以及事件和重新设计,出口审计(WORM+hash)。
18)反模式和风险
"以防万一":使用CDC/increments。
原始数据和报告数据的溷合:将Bronze/Silver/Gold分开。
缺少DQ和线性:没有可证明和可重复性。
分析层中的PII:隔离面膜,应用CLS/RLS。
整体的"夜间"乔巴:粉碎,分批并行。
忽略成本:注意小型文件,实现聚合,输入配额。
19)词汇表(简短)
ETL/ELT-提取/转化/下载(下载前/下载后)。
CDC-捕获更改。
SCD-测量历史化(I/II/III)。
WORM-报告包的不可更改存储。
时间旅行-阅读表格的历史版本。
20)结果
现代ETL/ELT不是脚本,而是可管理的平台:合同和DQ,等效嵌合/CDC,青铜/银/金层学科,可观察性和SLO,隐私性和经济性。按照本指南,您将获得可复制和可审核的输送机,这些输送机始终如一地为报告,产品和模型提供大规模且没有惊喜。