跳到正文
见远而行
返回

数仓困境:数据可以入仓,但责任、语义和经验不会自动入仓

技术与业务之间,总是隔着最后一公里。而在数据仓库建设中,这最后一公里尤其明显。

刚开始做数仓的时候,我关注的事情其实很简单。

数据能不能接进来,模型能不能建起来,SQL 能不能跑通,报表能不能按时产出。

做得久了以后,我反而越来越觉得,SQL 可能是这里面最省心的一部分。

真正让人疲惫的,很多时候都发生在 SQL 之外。

我们现在的湖仓接入了 180 多个上游系统、3800 多张表,向下又支撑大量报表、监管报送、接口,以及 100 多个业务系统。

做到这个规模以后,会有一种很明显的感觉:

几乎所有系统都和你有关系。

核心系统改了,和你有关系;信贷系统改了,和你有关系;某个管理系统出了一张报表,和你有关系;上游多了一个码值,可能也和你有关系。

可真到出了问题的时候,又经常很难一句话说清楚,这件事到底应该由谁负责。

数仓最开始承担的是数据加工。

做着做着,却慢慢开始承担数据清洗、业务口径确认、系统之间的数据中转、异常排查、需求协调、生产保障、资产管理,甚至一些历史知识的传承。

这里面很多事情,并不是谁一开始设计数仓的时候就计划让它承担的。

只是系统越来越多,需求越来越多,时间越来越久,事情一点一点汇聚了过来。

这篇东西也不想讲什么标准答案。

更多只是把这些年做数仓时,一些越来越明显的感受写下来。


一、数据进来了,问题并没有结束

1. 大量时间,其实都耗在那一点点异常数据上

我们现在有 3800 多张表入仓,涉及 180 多个上游系统。

这么多系统,数据标准不一致,我现在反而觉得是一件很正常的事情。

特别是中小银行,不可能所有系统都是自己从头研发的。不同系统来自不同厂商,有不同的产品历史、设计习惯和数据标准。

你很难要求所有源系统为了行内统一标准,全部重新改造一遍。

成本太高,也不现实。

所以很多事情最后自然落到了数仓。

上游的数据可以各有各的样子,进到数据体系以后,我们再想办法清洗、转换、映射、校验,让它们尽量能够被统一使用。

刚开始做开发的时候,我也会觉得,一个报表或者接口,SQL 又不复杂,为什么会做这么久?

后来自己做得多了,就知道不是这么回事。

大部分需求其实都用不到什么特别高深的算法。

关联、过滤、聚合、窗口函数,翻来覆去也就是这些。

真正花时间的是另外一些东西。

一个字段突然出现空值。

一个原来只有 01、02、03 的码值,某一天变成了 04,但没人告诉你。

两个系统明明描述的是同一笔业务,金额或者状态就是对不上。

有些系统表结构本身就不太适合分析。

甚至有些客户维度的信息,源系统里没有一张完整的客户表,最后还得从交易明细里去重、拼接,才能勉强还原出来。

技术测试发现一个问题,回来改。

业务测试再发现一个特殊场景,又改。

上线以后碰到历史数据,再改。

最后一个 SQL 可能只有几十行。

但前前后后大量时间,都耗在一句话上:

“这条数据为什么会这样?”

这也是我后来和团队做需求时越来越不愿意单纯用“SQL 复杂不复杂”判断工作量的原因。代码短,不代表事情简单。


2. 很多业务口径,并不是开发前确定的,而是在开发过程中慢慢长出来的

这是数仓里一个非常常见的场景。

需求来了,对方说:

我想要一张表。

然后呢?

什么粒度?

有哪些指标?

指标到底怎么算?

数据从哪里来?

同一个字段出现多个来源的时候以谁为准?

很多时候其实都还没有想清楚。

有时候需求会更直接:

源系统有什么字段你就给我什么,越多越好。

或者:

把 XXX1 表和 XXX2 表合起来,做一张新的 XXX3 表。

如果只是从系统功能角度看,这个要求似乎很好理解。

但做数据的人都知道,两张表能不能“合”,根本不是把字段拼到一起这么简单。

一个可能是一笔业务一条记录。

另一个可能是一笔业务对应十几条明细。

到底保留一对多,还是先汇总?

重复数据怎么算?

金额按哪边?

状态按哪边?

历史数据怎么办?

这些问题最后还是要有人回答。

而它们其实已经不是 SQL 问题了。

于是现实中的开发过程,经常变成:

先根据现有理解做一版。

业务拿去测,觉得不太对。

继续聊。再改。再测。

聊着聊着,大家才慢慢发现,原来一开始理解的“这张表”根本不是同一张表。

等口径终于差不多确定下来,时间可能已经过去一两个月。

然后很容易听到一句:

这个需求怎么两个月还没开发好?是不是你们资源没给够?

直到现在我听到这种话,还是会觉得我们数据团队的同事挺委屈。

站在需求方的位置,他确实看到需求已经提了两个月。

只是站在开发这一边,前一个月可能根本不是在“开发”,而是在和业务一起把需求重新定义出来。

所以现在回头看,我觉得问题倒不一定是谁效率低。

很多需求进入开发的时候,本身就还没有准备好。

数仓开发在这个过程中,不知不觉又承担了一部分业务分析和需求撮合的工作。

这件事很难完全避免,只是成本往往没人看得到。


3. 表越来越多,不等于真正沉淀出了数据产品

数仓做几年以后,表一定会越来越多。

但我现在越来越不愿意用“有多少张表”衡量数据资产做得好不好。

因为表多和好用,完全是两回事。

我们经常碰到这样的需求:

我要员工数据,你们之前给其他系统什么,就照样给我一份。

听起来很合理。

但真正问下去就会发现,大家嘴里的“员工数据”并不是一个东西。

有人要当前组织关系。

有人要历史组织关系。

有人关心岗位。

有人关心权限。

有人只需要基础信息。

还有人需要某些特殊业务属性。

客户、机构、账户、产品、交易也一样。

如果没有真正沉淀出稳定的数据产品,那么即使已经有几千张表,新需求来了还是得重新问一遍:

到底用哪张?

哪个字段可信?

之前为什么这么处理?

这张表是不是还有别的系统在用?

这个口径到底适不适合现在这个场景?

所以有一段时间我会发现一个挺尴尬的情况。

数据越来越多,表越来越多,但重复加工并没有明显减少。

后来才意识到,我们过去沉淀下来的很多东西,其实只是“表”。

离“拿过来就能放心用的数据产品”,还有一段距离。


二、最难说清楚的,往往是边界

4. 湖仓能力越强,越容易变成系统之间的万能转接头

这个问题我印象很深。

有一次我在一个群里看到 A 系统的人对 B 系统说:

我单独给你开发一个 API 很慢,你直接让湖仓把我的表卸下来,再推给你吧。

然后湖仓开发人员被拉进了群。

对方只说了一句:

你们对接一下。

源表是什么,没有。

字段说明,没有。

业务口径,没有。

测试环境怎么走,没有。

生产怎么对接,也没有。

甚至双方到底谁是负责人都说不清楚。我当时非常生气。

我直接把我们整理的数据对接文档发到群里,让双方先把源表、字段、频率、口径、负责人、测试方式、生产路径全部补完整,补完再谈开发。

结果到了真正需要填这些内容的时候,双方反而开始扭扭捏捏。

没有一个人愿意把事情完整接下来。

后来类似的事情碰多了,我也慢慢理解这种现象为什么会发生。

因为大家真正关心的是:

“数据能不能过去?”

至于谁定义、谁验收、以后出了问题找谁,往往是等出了问题以后才开始讨论。

而湖仓恰好又特别适合干这件事。

能抽。

能算。

能推。

能定时。

接一个新系统,比两个系统各自重新开发一套接口快多了。

短期看确实提高了效率。

问题是这种事情做过一次以后,很容易就会有第二次、第三次。

最后湖仓慢慢变成了系统之间的万能转接头。


5. 有些系统职责我们承担了,但系统并不真正属于我们

还有一些管理系统,本身只提供比较简单的增删改查。

复杂一点的规则计算、状态判断,甚至核心数据加工,实际上大量依赖湖仓。

平时运行正常的时候,大家一般不会特别意识到这一点。

一旦生产有问题,第一个动作往往就是把湖仓开发拉进群:

请数据配合排查。

这句话我们听得太多了。

有时候最后一查,确实是湖仓的问题。

有时候是上游的问题。

有时候是业务规则本身有问题。

还有时候查了一晚上,最后发现和数据一点关系都没有。

但你很难不去。

因为系统已经事实上依赖你的结果了。

这也是我后来越来越觉得别扭的一件事情:

我们承担了一部分系统职责,却没有真正获得这个系统的所有权。

它什么时候上线,不由我们决定。

业务规则怎么设计,不由我们决定。

源系统什么时候改字段,也不一定提前告诉我们。

但最终数据一旦不对,我们又一定在排查名单里。

很多生产上的疲惫,其实就来自这种边界。


6. 数据依赖,经常到了项目快上线才突然被想起来

这种事情也碰到过很多次。

一个系统从需求、设计做到开发,已经进入测试阶段。

距离上线没几天,突然有人说:

对了,这个功能还需要湖仓提供一份数据。

然后我们被临时拉进群。

这时候其实已经没什么空间讨论优先级了。

需求可能还没说清楚。

排期没有。

测试窗口也很短。

但上线时间通常不能改。

因为最后会变成一句:

不提供这份数据会影响项目上线。

所以只能先做。

紧急开发,紧急联调,紧急测试。

必要的时候加班上线。

外部看起来,这是一个临时插进来的“小需求”。

站在数据的角度,我很想骂人。因为这明明应该在需求设计阶段就被识别出来。

如果一个系统上线以后必须依赖另一套数据才能运行,那它就不是最后几天顺手补上的东西。

只不过很多项目在早期做架构设计的时候,并没有把“数据怎么来”当成和功能同等重要的一件事。


7. 每个人的事情都重要,最后只能由数仓自己做取舍

做数仓还有一种压力比较隐蔽。

就是几乎每一个需求方都觉得自己的事情应该优先。

这其实也可以理解。

监管报送当然不能延迟。

生产故障当然要马上处理。

重点项目马上上线,也不能等。

某个业务系统联调卡住了,对他来说整个项目组可能都在等你这一份数据。

但与此同时,团队自己还有计划内的需求、平台优化、数据治理、技术债。

没有哪个需求方会主动对你说:

我的事情不着急,你先做别人吧。

所以最终优先级判断这件事,还是会落到数据团队自己身上。

监管报送和普通需求怎么排?

生产事故和项目建设怎么排?

一个开发量很小、但风险很高的事情,要不要插队?

大项目联调期间,原来的计划是不是全部往后挪?

团队人数通常不会突然增加。

但计划外工作是会突然增加的。

有时候一个月排好的计划,可以被生产问题、重大项目和临时需求重新打散四五遍。

然后月底别人来问:

这个需求为什么一直没做完?

这个时候你很难用一句“最近比较忙”解释清楚。

因为对方看不到这一个月中间发生过什么。

这也是为什么我后来越来越觉得,数仓的资源问题不只是“人够不够”。

更麻烦的是计划外工作太多,而且其中很多事情根本没有拒绝的空间。


8. 血缘能告诉我们影响了谁,但后面的事情还得靠人解决

我们这些年一直在做血缘和影响分析。

这个方向肯定是对的。

以前上游说改一张表,大家凭经验看,觉得可能就两张报表受影响。

真正把血缘拉出来以后,发现下面挂着 50 多个程序。

有了血缘至少不会再凭感觉猜。

但做得越深,我越觉得血缘也不是万能的。

它可以告诉你:

这个字段一改,下面谁会受影响。

可接下来还有很多事情:

上游应该提前多久通知?

字段能不能直接删?

新增码值要不要通知?

类型修改怎么算重大变更?

旧字段要保留多久?

什么时候提供测试环境?

50 多个下游到底谁来组织回归?

这些都不是画一张血缘图能够解决的。

所以血缘做到后面,自然会碰到另外一个问题:系统之间到底有没有变化规则。

如果没有规则,即使今天很清楚下面有 50 个程序受影响,最后的处理方式可能还是——拉一个群,然后从头协调。


三、一个大项目,往往会把整个数仓一起拖进去

9. 对上游是一次系统改造,对数据团队却经常是一次全链路改造

有一类工作,我现在只要听到项目名字,大概就能判断接下来一段时间团队会很忙。

新核心系统改造、新收单系统、国业 FTU 改造、新绩效系统、新信贷系统……

只要这个系统足够重要,基本不可能和数据开发没有关系。

因为重要系统很少只服务自己。

它的数据可能已经入仓。

下面可能挂着大量报表。

监管报送可能在用。

其他系统可能通过湖仓拿它加工后的结果。

管理分析、绩效、接口,也可能一层一层依赖它。

所以上游项目说:

核心系统升级了。

我们听到的其实是另外一件事情:

源表可能要变。

字段可能要变。

码值可能要变。

业务规则可能要变。

数据粒度也可能变。

然后下面那一长串东西都得重新确认。

这类项目最麻烦的地方,往往还不是“要写多少程序”。

重大项目上线时间通常比较硬。

核心、信贷、国业这种项目,不太可能因为数仓工作量比较大,就往后推几个月。

所以只要它进入关键阶段,团队原来排好的普通需求、治理、优化工作基本都得让路。

外面看是“配合一个项目”。

对团队来说,可能意味着未来几个月的计划全部重排。

而真正耗人的,经常还是测试。

有时候上游改了一张表,我们最后真正修改的 SQL 可能没有多少。

但是你不能只证明:

新数据能入仓。

你还得往下看。

原来的加工逻辑还能不能成立?

数据量有没有明显变化?

码值是不是变了?

主键有没有变化?

原来一对一的关系是不是变成了一对多?

日报正常不正常?月报呢?

监管报送呢?

接口下发呢?

下游系统还能不能正常消费?

有时候代码只改一点点,回归清单却能列很长。

因为真正要证明的不是“我改完了”。

而是“这次改造没有把原来的东西弄坏”。

这一点尤其耗精力,也最容易被低估。

新旧系统并行的时候会更麻烦。

像新收单系统这种,并不是到了某一天旧系统直接关掉,新系统无缝接过来。

中间总有一个过程。

新老数据怎么对应?

上线前后的历史怎么衔接?

同一笔业务两边能不能对上?

并行期是不是要双跑?

结果不一样听谁的?

新系统如果出了问题能不能切回去?

一旦再加上存量迁移,事情就更多了。

余额要核。

笔数要核。

关键指标要核。

历史数据完整性也要核。

做到这个时候,数仓实际上已经不是“接几张新表”了。

我们是在参与整个系统切换的数据验收。

更麻烦的是,上游项目上线,并不意味着数仓这边也结束了。

系统上线当天正常,只能证明当天正常。

第一个工作日呢?

第一次日终批量呢?第一次月末呢?

第一次监管报送呢?

某些一年只出现几次的低频业务呢?

有没有测试环境里从来没出现过的新码值?

很多问题并不会在上线当天出现。

开会、评审、字段核对、数据探查、联调、问题定位、新旧数据比对、测试数据准备、陪业务验证、生产演练、上线值守、补数……

这些工作最后很难全部体现在“开发了几个需求”里面。

有时候一个项目持续投入了几个月,最后回头看代码提交,好像也没增加多少。

但人已经被占住了几个月。

经历过几次这种项目以后,现在反而不太先问“要开发多少东西”。

而会先想:

这次有多少链路要重新证明它是对的。

对上游来说,可能只是一次系统升级。

对数据团队来说,经常是一次迁移、兼容和全链路回归工程。

而且数仓往往不是最早进入项目的人,却很可能是最后一批真正退出项目的人。


四、平台越稳定,维护它的人反而越忙

10. “能做到”这件事,很容易慢慢变成“本来就应该做到”

技术能力上来以后,业务对数据时效的要求也会不断提高。

最开始 T+1 就够了。

后来希望凌晨早点到。

再后来希望当天。

然后半小时、5 分钟、实时。

从技术上说,这些事情大部分不是完全做不到。

问题是每往前走一级,成本都不是简单多加一点机器。

调度要调整。

容量要重新评估。

上游的稳定性要求更高。

失败重试、补数、监控都更复杂。

生产保障也得跟着升级。

但这个过程外部通常感受不到。

大家最容易记住的是:

上次那个系统不是已经做到 5 分钟了吗?

第一次是特殊需求。

第二次会被当成案例。

第三次就开始变成一种默认能力。

于是“我们能做”慢慢变成“你们本来就应该做”。

这个问题我觉得不能简单怪业务。

能力已经摆在那里,大家当然会希望用更好的。

真正需要提前想清楚的是,不同数据到底需要什么级别的服务。

有些东西实时很有价值。

有些东西 T+1 已经完全够用。

如果所有需求默认都往最高时效走,最后承担复杂度的一定还是平台自己。


11. 平台越重要,越难腾出完整时间去建设平台

这个循环我感受很深。

数仓每天都有很多事情不能不处理。

批量任务异常。

上游数据晚到。

文件没来。

接口异常。

数据库问题。

上游突然改数据。

补数。

重跑。

上下游协调。

到了月初、月末,还有大量报表和监管报送。

这些事情都有一个共同特点:

今天发生了,今天就得有人管。

而架构优化、资产建设、自动化、数据治理、技术债、团队能力建设这些事情,通常不是今天不做,系统今晚就会挂。

所以它们最容易往后排。

明天再做。

下周再做。

等这个项目结束再做。

等月末过去再做。

可等项目结束,下一个项目又来了。

以前我也会想,是不是我们把计划排得再好一点,这些事情就能挤出时间。

后来发现没这么简单。

一个已经承载大量生产任务的平台,维护它本身就会不断消耗团队的精力。

治理做得少,故障和重复劳动就会增加。

故障和重复劳动增加以后,就更没有时间治理。

这个循环一旦形成,很难靠一句“加强治理”解决。

如果一个团队 80% 的精力都花在保证昨天的东西今天还能继续跑,那么它其实很难有足够空间建设明天。


12. 调度是绿的,不代表数据就是对的

这是做数据以后特别容易形成的一种警惕。

程序可以完全正常执行。

SQL 没报错。

调度平台也是绿色。

数据顺利写进目标表。

但结果照样可能是错的。

上游可能少了一批数据。

Join 条件可能让数据翻倍。

新增码值没有进入原来的判断逻辑。

一个字段的业务含义可能已经发生变化。

甚至技术实现完全符合需求文档,但需求文档从一开始就理解错了。

所以数据测试和普通程序测试总有点不一样。

程序跑没跑成功,只能回答一部分问题。

剩下的还得看:

数据量正常不正常。

分布有没有明显变化。

历史趋势是不是合理。

上下游能不能对上。

业务拿结果看是不是符合真实场景。

这也是为什么有些问题技术测试怎么都测不出来,最后到了业务测试甚至生产才暴露。

不是程序没跑。

恰恰相反。

程序跑得非常成功。

只是成功地产生了一份错误的数据。


五、系统会留下来,人一定会变化

13. 有些程序每天都在跑,但已经很难说清楚真正的负责人是谁

湖仓运行时间长了以后,这个问题一定会越来越明显。

脚本越来越多。

但负责人不一定越来越清楚。

我们不可能把每一个程序永远绑定到当年的开发人员身上。

实际管理时,一般会按客户域、账户域、产品域这些主题做大致分工。

可真正的数据链路里,还有大量中间表、公共表、历史兼容任务,以及一些当年看起来是一次性需求,最后莫名其妙运行了很多年的程序。

人员调过几轮以后,很容易出现一种情况:

程序每天还在正常跑。

但真出了问题,已经没人能直接说:

这个东西就是我负责的。

于是只能顺着链路找。

问前面:

这个数据是不是你们出的?

再问后面:

你们是不是用了这张表?

最后还是靠几个熟悉历史的人,根据经验把问题领走。

以前我们其实很习惯按照“代码是谁开发的”管理程序。

后来我越来越觉得,这种方式在系统早期没问题,时间一长就会失效。

因为代码负责人会变。

真正应该长期存在的,可能是这份数据本身的责任关系。

谁认这个业务定义。

谁保障生产。

谁关心质量。

谁在使用。

出了争议以后谁能拍板。

这些东西如果没有跟着数据一起沉淀下来,时间越久,就越容易说不清楚。


14. 做数据建设的人,最后还在用 Excel 管自己的数据资产

这一点我觉得首先是我的管理问题。

这么多年,我们自己的很多数据资产信息,仍然依赖 Excel 和文档维护。

有哪些表?

有哪些接口?

谁在用?

字段是什么意思?

数据从哪里来?

多久更新一次?

负责人是谁?

很多内容最后还是散在 XLSX、文档,或者某几个人的脑子里。

这件事情其实挺讽刺的。

我们天天在帮别人做数据建设,自己的资产管理却没有真正数据化。

当然,我不是觉得 Excel 不好。

东西少的时候,Excel 很好用,甚至可能是最高效的。

问题是到了几千张表、几百个系统、上千份报表,再加上一堆接口以后,它开始兜不住了。

因为这个时候大家真正想查的,已经不是:

我们有哪些表?

而是:

这张表到底干什么?

数据从哪来?

谁在用?

为什么这样加工?

谁负责?

最近还有没有人用?

如果我改了这个字段,会影响谁?

出了问题应该先找谁?

这些信息如果查不到,那资产台账做得再整齐,也还是一个台账。

这也是我后来想做数据资产门户这类东西的一个很直接的原因。

不是为了把 Excel 搬到网页上。

而是很多原本靠人记住的关系,确实到了应该由系统自己维护的时候。


15. 上游不知道自己的数据去了哪里,下游也不知道自己的数据从哪里来

有一次上游系统改动上线,凌晨湖仓任务报错。

我们电话联系上游负责人。

对方听完以后很惊讶:

原来我的系统也有数据入仓吗?

第一次听到的时候会觉得有点不可思议。

后来想想,其实也不能完全怪他。

一个系统接入湖仓几年以后,最早负责对接的人可能已经离开或者换岗了。

后面接手的人主要负责系统自己的业务功能。

只要数据一直正常抽取,他根本没有机会知道,其中几张表每天还在被另外一套平台使用。

下游其实也一样。

业务可能知道:

我的报表用了这个指标。

但他未必知道这个指标上面经过了多少层加工,又依赖哪些源系统。

正常的时候,大家都不用知道这么多。

一旦上游变化,问题就出来了。

上游不知道自己改一下会影响谁。

下游也不知道自己的数据源已经变了。

以前我会把血缘更多看成资产展示能力。

现在我越来越觉得,它首先是生产风险控制的一部分。

不是图画得好不好看。

而是上游要改东西的时候,我们至少得知道应该去敲哪些人的门。


16. 文档能交接流程,但很难把一个人的判断完整交出去

系统运行时间越长,我越觉得真正难交接的东西不一定在代码里。

比如:

为什么这个字段当年要这么处理?

为什么这个任务失败以后不能直接重跑?

这个源系统历史上出过什么特殊问题?

哪些生产异常可以直接补数?

哪些一定要先联系业务确认?

这段代码看起来明明很多余,为什么一直没人敢删?

这些东西当然可以写进文档。

而且应该写。

但真正到了生产现场,很多判断不是看一遍操作手册就能学会的。

有些经验来自一次生产事故。

有些来自某个历史项目。

还有些东西,是一个人连续处理了很多次以后才知道:

“这种情况看起来一样,其实不能这么处理。”

所以我后来对“交接”这件事也有了点不同的理解。

写清楚怎么做,只是第一层。

更难的是写清楚:

为什么这么做。

为什么这里不能那么做。

如果换一种情况,判断标准是什么。

人员一定会变化。

系统复杂度却基本只会往上走。

如果经验沉淀的速度跟不上复杂度增长,每一次人员调整,多多少少都会带走一点东西。

而这些东西往往要等下一次异常发生,大家才发现原来没人知道了。


六、做久了以后,我反而没那么关注“还能再接多少数据”了

回头看前面这些问题,会发现它们表面上都不一样。

有的是数据质量。

有的是需求。

有的是系统边界。

有的是项目管理。

有的是资产治理。

有的是生产稳定性。

有的是人员交接。

可最后很多事情都会落到数仓。

原因也不复杂。

数仓连接了大量业务系统,但这些系统并不属于数仓。

我们需要对加工结果负责,却不能完全控制数据源。

我们支撑很多业务需求,却没有最终的业务决策权。

我们承担大量生产保障,又很难控制所有上游变化。

站在这个位置上,很多原本属于不同系统、不同部门、不同阶段的问题,最后都会从数据这条链路上体现出来。

刚开始做数仓的时候,我更关心的是:

数据能不能进来。

后来开始关心:

数据加工得对不对。

再往后,会关心这些数据能不能被找到、被理解、被重复使用。

做到现在,我反而越来越觉得,最难管理的已经不是“数据”这两个字本身了。

表总能建。

SQL 总能写。

数据也总有办法接进来。

真正麻烦的是几年以后,系统换了,人也换了,我们还能不能回答清楚:

这份数据为什么在这里?

这个口径为什么这么定义?

谁在使用?

谁应该负责?

上游变了以后会影响谁?

这里面那些看起来奇怪的历史逻辑,到底为什么不能删?

数据可以通过 ETL 自动进入仓库。

但责任不会。

业务语义不会。

历史经验也不会。

这些东西如果没有被有意识地留下来,就只能一直依赖人。

可能这才是我现在理解的,数仓真正的最后一公里。

数据可以入仓,但责任、语义和经验不会自动入仓。



评论

评论 API 尚未配置。