|
|
@@ -15,9 +15,10 @@
|
|
|
| **B** | `dw_base/` 重组 | B1 `__init__.py` 瘦身 · B2 `common/utils/io/ops` 四模块边界定稿 · B3 代码风格修正(`__contains__` / SQL 注入 / Shell-Python 重复) · B4 新占位模块 registry | 阶段 2 / 4 混合 |
|
|
|
| **C** | `bin/` 入口收口 | `datax-import` / `datax-export` 两命令收口 · `datax-gc-generator` 从零重写 · `csv-to-hdfs-starter` 实现 · `publish.sh` 已入 `bin/` | 阶段 1 尾 + 阶段 2 |
|
|
|
| **D** | 基础设施 | `tests/` 测试体系 · 告警模块重写 · 日志模块统一 · `dq/` 数据质量 · `wiki/` Docmost · `pm/` 项目管理集成 | 阶段 2 / 4 |
|
|
|
-| **E** | 业务 SQL 从零开发 | `jobs/{raw,ods,dwd,dws,tdm,ads}/` · DS 工作流 | 阶段 3 |
|
|
|
| **F** | 老代码删除 | `launch-pad/` 整删 · 其他已确认废弃 | 阶段 5 |
|
|
|
|
|
|
+> 新业务 SQL 从零开发(`jobs/{raw,ods,dwd,dws,tdm,ads}/` + DS 工作流)不属于重构 scope,不纳入聚簇。新业务 SQL 生产稳定一个完整周期后触发 F(`launch-pad/` 整删)。
|
|
|
+
|
|
|
### 依赖 DAG
|
|
|
|
|
|
```
|
|
|
@@ -44,12 +45,10 @@ A 其余项 ───────┐
|
|
|
B3 风格修正 ────┤ 可独立推进,与上图并行
|
|
|
D 基础设施 ─────┘
|
|
|
|
|
|
- (A + B + C 基本就绪后)
|
|
|
+ (A + B + C 基本就绪 → 新业务 SQL 从零开发,不属于重构 scope)
|
|
|
+ ↓
|
|
|
+ (新业务 SQL 生产稳定一个完整周期后)
|
|
|
↓
|
|
|
- ┌────┐
|
|
|
- │ E │ 业务 SQL 从零开发
|
|
|
- └─┬──┘
|
|
|
- ↓
|
|
|
┌────┐
|
|
|
│ F │ 老代码删除
|
|
|
└────┘
|
|
|
@@ -60,15 +59,13 @@ D 基础设施 ─────┘
|
|
|
- **B1 → A2**:`spark-defaults.conf` 路径解析依赖瘦身后的 `PROJECT_ROOT_PATH`,反过来做会踩返工
|
|
|
- **B2 → B4**:四模块(`common/utils/io/ops`)边界不定,新占位模块放哪里都是赌博
|
|
|
- **B2 → C**:`bin/` 两命令的底层实现要放 `dw_base/datax/entry.py`,属于四模块定稿后的延伸
|
|
|
-- **A + B + C → E**:业务 SQL 开工需要 conf 外配就绪 + dw_base 结构稳定 + bin 入口可用
|
|
|
-- **E → F**:`launch-pad/` 删除前置条件是新 `jobs/` 在生产跑稳
|
|
|
+- **新业务 SQL 生产稳定 → F**:`launch-pad/` 删除前置条件是新 `jobs/` 在生产跑稳一个完整周期(新业务 SQL 开发本身不纳入重构 scope)
|
|
|
|
|
|
**可并行的事**(无强依赖):
|
|
|
|
|
|
- A 大部分子项(env.sh / workers.ini / alerter.ini / datax-speed.ini / datasource 多环境 / DataX 脚本路径解耦)彼此独立
|
|
|
- B3 代码风格修正(`__contains__` / SQL 注入)与任何聚簇都不冲突
|
|
|
- D 基础设施(tests 骨架 / dq / sync / pm)骨架已建,实现可滚动推进
|
|
|
-- **基础模块弄好后 E 就可并行开工**,不必等 F
|
|
|
|
|
|
### 本文各节与聚簇的对应
|
|
|
|
|
|
@@ -531,26 +528,22 @@ record_per_channel = 100000
|
|
|
| `wiki/` | `dw_base/wiki/` | 骨架 | 待确认 Docmost API 鉴权 / webhook 支持后实现 | 阶段 4 之后 |
|
|
|
| `tests/` | `tests/{unit,integration}/` | 骨架 | 阶段 4 首批 UDF 单测启动时同步补 `conftest.py` + fixtures | 阶段 4 |
|
|
|
|
|
|
-### 2.12 通用 UDF 注释完整化 + 自查表(B 延伸) [聚簇 B]
|
|
|
+### 2.12 通用 UDF 自查表(B 延伸) [聚簇 B]
|
|
|
|
|
|
-**现状**:`dw_base/udf/common/spark_common_udf.py` 500 行 40 函数由 6 份老文件合并而来(见 `kb/92` 2026-04-20 UDF 重组条目),函数签名齐全但注释粗细不一:部分函数只有函数名,部分 docstring 写了逻辑但没写入参约束 / 返回类型 / 异常路径 / SQL 调用示例。`common/` 目录 UDF 由 `bin/spark-sql-starter.py` 自动 `ADD FILE` 注册(启动日志 40 条 `注册 Python UDF xxx` 可证),理论上任意 SQL 都能用,但"能用"不等于"知道怎么用"。
|
|
|
+**现状**:`dw_base/udf/common/spark_common_udf.py` 462 行,其中 `@udf` 装饰的注册函数 13 个(启动日志 `注册 Python UDF xxx` 条数即真值),另有若干普通 `def` 辅助函数不进 SparkSQL 注册表。函数注释已由开发者手动补完(编号 `UDF-XX` 顺序注入、分类分节 JSON / ARRAY / STRING / NUMERIC-DATE-HASH / CROSS-TYPE),本节不再规划"注释补齐"动作。
|
|
|
|
|
|
-**问题**:
|
|
|
-- 注释不一致导致业务 SQL 开发时需要反复读源码猜参数语义,违背 common/ auto-load 的"开箱即用"初衷
|
|
|
-- 未来新增通用 UDF 如果没有登记表,规模大了之后"这个函数有没有 / 叫什么 / 谁加的"全靠 grep
|
|
|
+**问题**:未来新增通用 UDF 如果没有登记表,规模大了之后"这个函数有没有 / 叫什么 / 谁加的"全靠 grep。
|
|
|
|
|
|
**目标态**:
|
|
|
|
|
|
-1. **注释完整化**:40 函数全部补齐 docstring,统一 5 段模板 —— 一句话摘要 / 入参(名 · 类型 · 约束 / 可空 / 单位) / 返回(类型 · 语义 · 空值场景) / 异常与边界 / SQL 调用示例。按分类分批推进:JSON 段 → Array 段 → String 段 → Numeric-Date-Hash 段 → Cross-type 段,5 批独立 commit。
|
|
|
-
|
|
|
-2. **UDF 自查表**:新建 `kb/31-UDF手册.md`(与 `30-开发规范.md` 同级独立文档;40 函数规模独立成文更稳,新增 UDF 需要稳定引用锚点)。表头 `函数编号 | 函数名 | 分类 | 入参 | 返回 | 描述 | 示例 | 补注释状态`,函数编号由 Codex 在 `spark_common_udf.py` 中以顺序注释注入(不依赖行号,避免改动污染他函数)。common 与 business 两类 UDF 都在本表登记,分两段(§1 通用 / §2 业务);初版由 Codex 补注释完成后登全量。
|
|
|
+- **UDF 自查表**:`kb/31-UDF手册.md`(与 `30-开发规范.md` 同级独立文档)。表头 `函数编号 | 函数名 | 分类 | 入参 | 返回 | 描述 | 示例`,函数编号沿用 `spark_common_udf.py` 中的 `UDF-XX` 顺序注释。common 与 business 两类 UDF 都在本表登记,分两段(§1 通用 / §2 业务)。初版 13 个通用 UDF 已登记(2026-04-21)。
|
|
|
|
|
|
**回归检验**:
|
|
|
-- 任意 SQL 文件直接 `SELECT my_udf(col)` 能跑通(common auto-load 链路未变,保留现状)
|
|
|
-- 自查表行数 = `spark_common_udf.py` 中 `@udf` / `def` 导出函数数(启动日志中 `注册 Python UDF` 的条数即真值)
|
|
|
+- 任意 SQL 文件直接 `SELECT my_udf(col)` 能跑通(common auto-load 链路未变)
|
|
|
+- 自查表 §1 行数 = `spark_common_udf.py` 中 `@udf` 注册函数数(启动日志中 `注册 Python UDF` 的条数即真值)
|
|
|
|
|
|
**与其他条目的关系**:
|
|
|
-- 2026-04-20 UDF 模块重组(kb/92)已完成重组动作,本节是其延伸(补注释 + 登记表)
|
|
|
+- 2026-04-20 UDF 模块重组(kb/92)已完成重组动作,本节是其延伸(登记表)
|
|
|
- 不动 auto-load 机制(`bin/spark-sql-starter.py` + `dw_base/__init__.py:29 COMMON_SPARK_UDF_FILE` 常量),只补文档
|
|
|
|
|
|
## 三、`__init__.py` 瘦身(高优先级) [聚簇 B(B1)]
|
|
|
@@ -783,13 +776,9 @@ else:
|
|
|
| `wiki/` Docmost → `kb/inbox/` | 待启动 | Docmost API 鉴权确认 | §2.11 |
|
|
|
| Ranger Hive 策略验证(集群侧) | 待启动 | — | §7.5 |
|
|
|
|
|
|
-### E 业务 SQL 从零开发(阶段 3)
|
|
|
-
|
|
|
-见 `kb/92-重构进度.md` 阶段 3 checklist。前置:A + B + C 基本就绪。
|
|
|
-
|
|
|
### F 老代码删除(阶段 5)
|
|
|
|
|
|
-见 `kb/92-重构进度.md` 阶段 5 checklist。前置:E 在生产稳定一个完整周期。
|
|
|
+见 `kb/92-重构进度.md` 阶段 5 checklist。前置:新业务 SQL 在生产稳定运行一个完整周期(新业务 SQL 开发不属于重构 scope,详见 kb/92 变更记录)。
|
|
|
|
|
|
### 当前推进建议
|
|
|
|
|
|
@@ -806,4 +795,4 @@ else:
|
|
|
- A2 spark-defaults.conf ← B1
|
|
|
- C `bin/` 两命令 / `datax-gc-generator` 重写 ← B2 + A datax
|
|
|
- D `ops/` 下两个工具 ← B2
|
|
|
-- E 业务 SQL ← A + B + C 基本就绪
|
|
|
+- F `launch-pad/` 整删 ← 新业务 SQL 生产稳定一个完整周期(新业务开发本身不属于重构 scope)
|