|
|
@@ -1,13 +1,12 @@
|
|
|
# 埋点数据同步实现(开发文档)
|
|
|
|
|
|
-> 受众:内部 / 接手者 / AI。本文档是实现细节,与 `kb/13-埋点同步-设计.md` 配套。
|
|
|
-> 设计取舍、合规背景、协作流程见设计文档,不重述。
|
|
|
-
|
|
|
## 1. raw 层 DDL
|
|
|
|
|
|
### 1.1 表名
|
|
|
|
|
|
-`raw.raw_usr_traces_apd_d`(域 = usr 含埋点;源表名 = traces;apd 不可变事件;周期 d)
|
|
|
+`raw.raw_usr_traces_his_o` 历史埋点表
|
|
|
+
|
|
|
+`raw.raw_usr_traces_apd_d ` 增量埋点表
|
|
|
|
|
|
### 1.2 字段清单
|
|
|
|
|
|
@@ -60,7 +59,7 @@ STORED AS ORC
|
|
|
LOCATION '/user/hive/warehouse/raw.db/raw_usr_traces_apd_d';
|
|
|
```
|
|
|
|
|
|
-DDL 文件落点:`manual/ddl/raw/usr/raw_usr_traces_apd_d_create.sql`
|
|
|
+DDL 文件落点:`manual/ddl/raw/usr/raw_usr_traces_apd_d_create.sql` + `manual/ddl/raw/usr/raw_usr_traces_his_o_create.sql`。`raw.raw_usr_traces_his_o` schema 同上,仅表名和 LOCATION(`/user/hive/warehouse/raw.db/raw_usr_traces_his_o`)不同。
|
|
|
|
|
|
> **与 §8.1 default ORC 一致;与现 testbed `test.raw_usr_traces_apd_d` 的单列 STRING + TEXTFILE 不同**——testbed 是冒烟阶段产物,本方案不复用其 schema。
|
|
|
|
|
|
@@ -113,30 +112,28 @@ def apply_mask(event_name: str, properties: Dict, conf: Dict) -> Dict:
|
|
|
|
|
|
单测:`tests/unit/tracking/test_mask.py`(覆盖 drop / mask / 未声明事件兜底 / drop+mask 同字段优先级)
|
|
|
|
|
|
+### 2.3 Spark UDF
|
|
|
+
|
|
|
+`dw_base/udf/business/spark_traces_udf.py`:包装 `apply_mask` 为 Spark UDF `parse_and_mask(raw_es_hit_json STRING) → STRUCT<...>`,输入 ES hit 整行 JSON,输出拍平字段 + properties_json + params_json(已脱敏)。两条入仓路径(历史 / 增量)共用同一份 UDF,差异仅在数据源 SQL。
|
|
|
+
|
|
|
## 3. 历史数据入仓
|
|
|
|
|
|
### 3.1 工具
|
|
|
|
|
|
-`jobs/raw/usr/raw_usr_traces_apd_d.py`(基于现 `tests/integration/tracking/raw_usr_traces_apd_d.py` 演进)
|
|
|
+`jobs/raw/usr/raw_usr_traces_his_o.sql`:Spark SQL,`USING text` 读 HDFS gz 临时目录 → 调 §2.3 `parse_and_mask` UDF → INSERT OVERWRITE 写 raw `his_o` 分区。
|
|
|
|
|
|
-变化点:
|
|
|
-- `HIVE_DB` 从 `test` 改回 `raw`
|
|
|
-- `HDFS_TBL_DIR` 改为 `/user/hive/warehouse/raw.db/raw_usr_traces_apd_d`
|
|
|
-- 不再 put 整 .gz 文件到 HDFS(旧方案是单列 STRING + TEXTFILE 直存),改为:
|
|
|
- 1. 解压 .gz
|
|
|
- 2. 逐行解析 JSON
|
|
|
- 3. 提取拍平字段(按 §1.2 schema)
|
|
|
- 4. 调 `dw_base.tracking.mask.apply_mask` 脱敏 properties
|
|
|
- 5. 序列化为 ORC(PySpark / pyorc)
|
|
|
- 6. put HDFS → ALTER TABLE ADD PARTITION
|
|
|
+`jobs/raw/usr/raw_usr_traces_his_o.py`:极薄包装脚本,三步:
|
|
|
+1. `hdfs dfs -put` 本地 .gz 到 HDFS 临时目录(如 `/tmp/raw_usr_traces_his/{dt}/`)
|
|
|
+2. 调 `bin/spark-sql-starter.py -f` 跑 SQL
|
|
|
+3. 清 HDFS 临时目录
|
|
|
+
|
|
|
+> 不走 Python 单机解析:1.4M event/天单机不利用集群算力;改 PySpark + UDF 后,与增量路径共用 §2.3 UDF,逻辑统一。
|
|
|
|
|
|
### 3.2 CLI
|
|
|
|
|
|
继承现脚本 `-dt YYYYMMDD` 4 种形式(单日 / `20260407-` / 区间 / 离散);复用 `dw_base.utils.datetime_utils.get_date_range` 解析。
|
|
|
|
|
|
-### 3.3 现 testbed 数据
|
|
|
|
|
|
-按设计文档 §7.2,本轮**暂不处理** `test.raw_usr_traces_apd_d`。后续视情况 drop 重做。
|
|
|
|
|
|
## 4. 增量数据入仓
|
|
|
|
|
|
@@ -165,47 +162,24 @@ TBLPROPERTIES (
|
|
|
`jobs/raw/usr/raw_usr_traces_apd_d.sql`(落地时补完整 SQL)
|
|
|
|
|
|
关键点:
|
|
|
-1. SELECT 时按 event_name 分支调用脱敏 UDF(封装 `dw_base.tracking.mask.apply_mask`)
|
|
|
-2. 字段拍平 + properties_json + params_json
|
|
|
+1. CREATE TEMP VIEW 映射当日 ES 索引(见 §4.2)
|
|
|
+2. SELECT 调 §2.3 `parse_and_mask` UDF,字段拍平 + properties_json + params_json
|
|
|
3. `INSERT OVERWRITE TABLE raw.raw_usr_traces_apd_d PARTITION (dt='${dt}')`
|
|
|
|
|
|
### 4.4 调度
|
|
|
|
|
|
DolphinScheduler 工作流,每日 T+1 跑一次。失败重跑(INSERT OVERWRITE 幂等)。
|
|
|
|
|
|
-## 5. 协作流程的实现
|
|
|
-
|
|
|
-### 5.1 新事件审计 SQL
|
|
|
-
|
|
|
-每日 raw 跑完后执行(实现待落地):
|
|
|
|
|
|
-```sql
|
|
|
--- 当日 raw 出现的 event_name diff 配置已知集合
|
|
|
--- 配置已知集合 = conf/tracking-mask.ini 里所有 [event:XXX] section 名
|
|
|
--- 输出:(new_event_names, sample_count) → 推 alerter
|
|
|
-```
|
|
|
-
|
|
|
-### 5.2 alerter 推送
|
|
|
-
|
|
|
-复用 `conf/alerter.ini`,新增事件推到数仓内部群(具体 channel key 落地时定)。
|
|
|
|
|
|
-## 6. 落地 checklist
|
|
|
+## 5. 落地 checklist
|
|
|
|
|
|
-- [ ] 写 `manual/ddl/raw/usr/raw_usr_traces_apd_d_create.sql`
|
|
|
+- [ ] 写 `manual/ddl/raw/usr/raw_usr_traces_{his_o,apd_d}_create.sql`
|
|
|
- [ ] 写 `conf/tracking-mask.ini` 初版(含至少 1 个含敏事件示例)
|
|
|
- [ ] 写 `dw_base/tracking/mask.py` 模块 + `tests/unit/tracking/test_mask.py` 单测
|
|
|
-- [ ] 改造 `tests/integration/tracking/raw_usr_traces_apd_d.py` → `jobs/raw/usr/raw_usr_traces_apd_d.py`(DB / 路径 / 脱敏逻辑)
|
|
|
-- [ ] 验证 ES Storage Handler 在新 CDH 集群可用 + 写映射 SQL 模板
|
|
|
-- [ ] 写增量 SQL `jobs/raw/usr/raw_usr_traces_apd_d.sql`
|
|
|
-- [ ] 历史 4 个 dt 文件按新方案重跑(不动现 testbed,写到正式 raw 表)
|
|
|
+- [ ] 写 `dw_base/udf/business/spark_traces_udf.py`(封装 mask 为 Spark UDF)
|
|
|
+- [ ] 写历史 SQL `jobs/raw/usr/raw_usr_traces_his_o.sql` + 包装脚本 `.py`(hdfs put + 调 starter + 清 tmp)
|
|
|
+- [ ] 写增量 SQL `jobs/raw/usr/raw_usr_traces_apd_d.sql`(CREATE TEMP VIEW ES + INSERT OVERWRITE)
|
|
|
+- [ ] 历史 4 个 dt 文件按新方案重跑
|
|
|
- [ ] 上 DS 调度
|
|
|
-- [ ] 写新事件审计 SQL + alerter 集成
|
|
|
-
|
|
|
-## 7. 与现 testbed 的关系
|
|
|
-
|
|
|
-现 `test.raw_usr_traces_apd_d`(单列 raw_json STRING + TEXTFILE)属冒烟测试遗留,**不是本方案 raw 表**。本方案上线后两种处置选择:
|
|
|
-
|
|
|
-- 选择 1:drop 现表 + 历史 4 个 dt 重做按新方案入正式 raw 表
|
|
|
-- 选择 2:现 test 表保留作历史快照,新方案 raw 表重新启动(推荐)
|
|
|
|
|
|
-按设计文档 §7.2 暂不处理,留待落地时单独评估。
|