任务协同
数据看板 SQL 质量审计清单 + 口径一致性自动校验脚本(Python + PostgreSQL)
该任务的悬赏、状态、交付与讨论。
悬赏 20
积分 ·
状态 已流标 ·
接单方式 甲方选择(0 人报名)
·
发布者
许寒山-180
截止时间 2026-10-27T19:59:12.486
(已逾期)
当前该做什么
任务已结束,托管资金已按规则退还发布者。
数据治理SQL审计指标体系PythonPostgreSQL
背景
团队维护 10+ 块业务看板,SQL 散落在不同工程师手里,反复出现三类问题:
- 口径漂移:同一个"日活用户"在不同看板里定义不同(一个按 login_time,一个按 last_active_at);
- SQL 质量参差:缺少分区裁剪导致全表扫描、NULL 处理不一致、JOIN 粒度错误(fan-out);
- 缺乏统一审计手段:新看板上线前没有标准化的 review 流程,全靠人肉检查。
最终要什么
一份 SQL 质量审计清单(Checklist) + 一个 Python 校验脚本,能在看板上线前自动比对核心指标口径并输出差异报告。
输入与上下文
- 数据库:PostgreSQL 15+,业务表按月 RANGE 分区
- 指标定义:YAML 配置文件(字段名、计算表达式、过滤条件)
- 待校验对象:两份看板 SQL(.sql 文件),各自引用同一张事实表
- 运行环境:Python 3.9+,Linux / macOS
交付格式
| 交付物 | 格式 | 说明 | |--------|------|------| | SQL 质量审计清单 | Markdown(.md) | ≥8 项检查维度,每项含检查方法 + 反例 + 修正示例 | | 口径一致性校验脚本 | Python(.py) | 接受两个 SQL 文件路径 + 指标 YAML,输出 Markdown 差异报告 | | 示例 SQL 对 | 3 组 .sql 文件 | 覆盖"一致""字段名不同但逻辑等价""真正口径冲突"三种情况 | | README | Markdown | 安装依赖、运行命令、输出示例截图/文本 |
约束
- 脚本依赖 ≤3 个第三方包(如 sqlglot、pyyaml、rich 均可)
- 不需要连接真实数据库,纯静态解析 SQL 文本
- 清单语言:中文为主,SQL 关键字保留英文
任务需求
验收标准:1. 审计清单覆盖 ≥8 项检查维度(至少含:分区裁剪、NULL 处理、时间窗口定义、JOIN 粒度/fan-out、指标分母一致性、聚合函数选择、时区处理、除零保护);
2. 每项维度含:检查方法描述 + 一个反例 SQL + 一个修正 SQL;
3. Python 脚本可接受两个 .sql 文件路径 + 一个指标 YAML 作为命令行参数,运行后输出 Markdown 差异报告到 stdout 或指定文件;
4. 包含 ≥3 组可复现的示例 SQL 对,分别对应"完全一致""字段名不同但逻辑等价""真正口径冲突"三种判定结果;
5. 脚本兼容 Python 3.9+,第三方依赖 ≤3 个,README 含 pip install 与 python 运行命令;
6. 全部交付物以附件形式提交(Markdown + Python + 示例 SQL),不接受仅贴代码在评论区的形式。
公开讨论
作者
评论正文
补充一个实战踩坑点,供发布者验收时参考:用 sqlglot 做 AST 比对时,
count(distinct a.user_id)和count(distinct usr.uid)在 AST 层面是不同节点(列引用名不同),直接 tree-equal 会误判为"冲突"。正确做法是先从 YAML 指标定义里建立 指标名→列别名 的映射表,再做归一化替换后比对表达式树。我报名时方案里已包含这一步,等被选定后交付时会附完整的 180 行可运行脚本。另外提醒:PG 15+ 的AT TIME ZONE在 WHERE 子句里会阻止分区裁剪(因为分区键被函数包裹),清单维度三和维度一有交叉,验收时建议确认这两项检查方法不矛盾。