本文档记录
poyee-data-warehouse团队通用开发流程与项目管理规范。 与数仓命名规范.md、90-重构路线.md配合使用。
需求评审 → 技术评审 → 开发&测试排期 → 设计文档 → 开发&测试 → 需求方验收 → 生产部署 → 复盘总结
详细了解需求背景与细节,讨论可行性。关键点:
阐述详细的技术实现方案,评估合理性:
评估工作量,安排各步骤截止日期。
放置位置:Confluence(或团队 Wiki)。
必要章节:
必须在开发测试开始前完成需求背景、技术方案、排期计划;其他部分可随进度补充。
按技术方案和排期实现。
按环境部署(见 publish.sh)。
复盘问题出在哪里、以后如何规避、有哪些优点可以借鉴。
目前 TPAD 已创建数据需求工作流和技术需求工作流。
| 耗时 | 要求 |
|---|---|
| 2 小时以下临时需求 | 需要聊天记录做留档 |
| 2 小时以上 | 必须建立 TPAD 任务 |
| 8 小时以上 | 必须有方案或设计文档 |
flowchart TD
A[数据需求] --> B[需求沟通]
B --> C[需求确认]
C --> D{是否涉及敏感数据?}
D -->|是| E[敏感数据使用审批]
E --> F{是否审批通过?}
F -->|否| Z[结束]
F -->|是| G{是否需要新的采集方案?}
D -->|否| G
G -->|是| H[采集需求流程]
H --> G
G -->|否| I{所需指标维度<br/>是否已进仓?}
I -->|否| J[数据接入流程]
J --> I
I -->|是| K[排期开发]
K --> L[开发完成]
L --> M[需求方验收]
M --> N{是否验收通过?}
N -->|否| K
N -->|是| O{是否追溯历史数据?}
O -->|否| Z
O -->|是| P[追溯数据]
P --> Q[追溯及验收完成]
Q --> Z
数据开发在通用流程基础上增加以下专属环节:
| 环节 | 说明 |
|---|---|
| 敏感数据审批 | 涉及用户身份证、联系方式、支付信息等敏感字段需走专项审批 |
| 采集需求流程 | 数据源尚未接入时,先走 DataX/Kafka 采集接入流程 |
| 数据接入流程 | 数据已采集但尚未建模入仓时,先落 ODS/DWD |
| 指标维度复用判定 | 先检查所需指标是否已在字典,避免重复建模 |
| 数据探查 | 源数据行数、空值率、主键唯一性、字段分布 |
| 建模评审 | 对照总线矩阵与维度建模五步法(见 数仓分层与建模.md) |
| 命名合规自检 | 对照 数仓命名规范.md 第 7 节 Checklist |
| 口径对齐 | 对照 指标体系.md 的指标字典 |
| 数据质量校验 | 在 DolphinScheduler 工作流中加入质量校验节点 |
| 历史回溯 | 确保任务支持按 dt 回跑;追溯完成后需要验收 |
dict.__contains__(key),改用 key in dictconf/(见 90-重构路线.md §2)COMMENTdt(日期)/ hr(小时)conf/sql_style.xml 是 JetBrains 系 IDE(PyCharm / DataGrip / IntelliJ)的 SQL Code Style 导出文件,团队统一从此文件导入,避免每人格式化后 diff 里一堆空白噪音。
导入方式(PyCharm 为例):
File → Settings → Editor → Code Style → SQLImport Scheme → IntelliJ IDEA code style XMLconf/sql_style.xml → 确认覆盖当前 schemeCtrl+Alt+L 触发格式化即按此风格关键风格约定(所有 SQL 方言统一生效):
| 配置项 | 值 | 说明 |
|---|---|---|
KEYWORD_CASE |
0 | 关键字不强制大小写(保留作者原写法) |
TYPE_CASE |
3 | 类型名小写 |
SELECT_EL_WRAP / FROM_EL_WRAP |
2 | SELECT 字段 / FROM 表每个独占一行 |
CORTEGE_COMMA_1ST |
true | 逗号前置(, col 而不是 col,),减少增删行的 diff 噪音 |
SELECT_USE_AS_WORD |
1 | 别名写 AS xxx,不省略 |
SELECT_ALIGN_AS |
false | 不对齐 AS 关键字(见下方说明) |
FROM_PLACE_ON / FROM_INDENT_JOIN |
10 / false | JOIN 换行、不额外缩进 |
INSERT_INTO_NL |
1 / 2 | INSERT INTO 换行 |
EXPR_CASE_END |
1 | CASE / END 换行 |
CONTINUATION_INDENT_SIZE |
4 | 续行缩进 4 空格 |
字段别名不对齐 AS 关键字是刻意的,理由:
trd_order_pay_amt_rmb_total_1d 这种 30+ 字符的字段名很常见,对齐后右边要留 40+ 空格,一屏横向放不下反而更难读用 VSCode / Cursor / 纯 vim 的同学暂时手工遵守上述约定即可。后续若团队全面切换到非 JetBrains 工具链,会补一份 .sqlfluff 配置作为等价物,这份 xml 会随之归档或删除。
conf/env.sh 读取见 90-重构路线.md §6。核心要点:
local[*] 模式manual/ 目录存放一次性、非幂等的 SQL 脚本,与 jobs/ 的语义完全独立。详细目录约定见 00-项目架构.md §8,这里只列开发团队必须遵守的核心规则:
manual/ 下任何脚本都不得被 DolphinScheduler 定时工作流引用;仅允许通过一次性工作流或命令行手动触发{yyyymmdd}_{层}_{域}_{简述}.sql,便于按时间排序与过期归档fix/ 和 backfill/ 强制 Review:涉及线上数据订正和历史回刷的脚本,合并前至少 1 人 Reviewjobs/ 的边界:
manual/ddl/ 写一个新的 ALTER 文件,不要回头改 manual/ddl/{表名}.sql(migration 模式,详见 00-项目架构.md §9.6)。jobs/ 里没有 CREATE TABLE 可改jobs/ 原 SQL + 日期参数,manual/backfill/ 只放调用包装manual/adhoc/manual/fix/,必须附 TPAD 工单号manual/archive/ 或直接删除