Dewei Zhai

2026-05-13

报表的痛,根子在团队合作方式

PVH 的工单写的是「修报表」。但 bug 不在报表——而是两个团队的协作方式。

工单

“一些 dashboard 数字不对——你能修一下吗?”

工单就这一句。理论上是标准的 data engineering 活:花一下午找到坏的 join,发个 fix,下班。

工单只是症状

把破数字这一层揭开,下面的实际样子是:PVH 的数据团队已经分裂成 两半,两边几乎读不懂对方的代码——

  • DA(分析师)在 notebook 里出业务逻辑——能 SQL 的写 SQL, 不能的写 Python。
  • DE(工程师)拿到这套逻辑后用 PySpark 重写一遍,丢上 Spark 生产、Airflow 调度、对接 BI。

每个 dashboard 都要写两遍。排查一个数字差异要开一次会。出一个 新 dashboard,DA 在 notebook 上花约 2 周,再等 DE 排 1–2 个 sprint 来重写。

DE 成了肉眼可见的瓶颈。于是 DA 悄悄放弃了平台——他们手动跑 notebook,把结果直接灌进 BI。版本管理、测试、lineage、告警、 监控:全部没了。DE 辛苦搭起来”保证数字正确”的那一整套,全在 真实交付链路的上游,碰不到真正的链路。

“数字不对”只是那条 shadow pipeline 最显眼的症状,不是病因。

难的是拿批准

看见这个问题并不难。我第一次在 PVH 的时候就已经 flag 过这个 rework 循环,也尝试推动过改革。没推得动——这也可以理解。 dashboard 归 CRM 所有,notebook 归他们家分析师所有,让他们仅 因为一个走了又回来的 contractor 一句话就改变工作方式,这不是 engineering 单方面能 mandate 的事。信任还没建立。

所以第二次 engagement 头几个月,我就埋头修活。数字不对的工单、 Spark 性能事故、IAM 一团乱麻——一个一个接,一个一个解。这换来 的信用,是讲道理换不来的。

下一次机会,还是一张”数字不对”的工单。这次我没只是打 patch, 而是花了一周时间,在 prod 边上搭了一套并行环境,把新的协作方式 端到端跑了一遍:一份 DA 写法的 SQL notebook、commit 时的 lint 钩子、YAML catalog、DQ gate、同一个 dashboard 从新链路拉出来。 跟 prod 并排,同样的输入,同样的输出。

这样就够了。

真正改的是什么

不是”修 dashboard”。也不是”再招几个 DE”。而是改 DA 和 DE 之间 的协作方式。

  • DA 只写 SQL,不写 PySpark。 理由很机械:sqlfluff 这类 静态分析器能把 SQL 一路解析到 IO 关系层,于是 lint 钩子可以 机械地知道一个 notebook 读了哪些表、写了哪些表,并据此卡门。 PySpark 在业务层没法做同样的静态分析——想知道它到底干了什么, 只能靠人读。
  • Notebook 在 commit 时统一 lint。 输入必须来自 DE 治理的 表。输出必须 idempotent。违反则 git commit 直接失败——DA 第一时间就知道,而不是三天后的 standup 上才听说。
  • 一份 YAML 登记所有 notebook。 输入表、输出表、调度、特殊 运行时需求。这份 YAML 就是 Airflow 调度的唯一可信来源,同时 白送 lineage 和上游就绪检查。
  • DE 一次性包揽 boilerplate。 上游检查、catalog 交互、IAM、 BI 投递,以及把 DA 自助表里通过校验的行提升到 DE 同名生产表的 DQ gate。DA 只负责 transform 逻辑本身。

四件事,没有一件是 dashboard。

数字

指标改造前改造后
新 dashboard TTM4–6 周1–2 小时
DE 释放出来的时间约 5 人日 / sprint
Dashboard 刷新就绪10–11 AM5–7 AM

释放出来的这些人日,DE 拿去做真正的平台事:源数据质量、性能瓶颈、 lineage UI、计算/存储效率优化——他们写了一堆工单但一直没空做的 东西。

经验总结

大多数工程问题,本质都不是”我们不知道怎么造 X”。本质是”我们其实 不知道自己在造什么,于是在用复杂度去补偿”。dashboard 没坏,坏的 是两个团队之间的交接,组织在这个坏交接外面又搭了一条平行的 shadow pipeline,只为继续把活交付出去。

每个系统都在朝更高的熵漂。值得问的是你改什么、让它有一阵子朝 反方向漂。通常要改的是协作方式,不是一段代码。


想聊聊?和我的助理辩一辩,或者给我留个言