目的:
通过记录数仓数据治理的实践过程,总结一些通用的思路和方法,供其他同学参考
1、从数据管理开始
因为香港钱包之前一直跟着业务需求快跑,并没有开展数据管理方面的工作,所以在开始数据治理之前,我们先简单开展了一些数据管理的动作:
数据资产分类
从数据产出 到 数据流入 进行自上而下的层次、模块分类:
回流业务侧数据、输出外部业务数据、BI报表数据、人群数据、标签数据
域内中间层、跨域中间层
流量日志、服务端日志、业务ODS数据、维表数据
从系统对接角度 对各个层次数据进行目录划分:
业务系统、BI系统、营销系统、外部业务、内部域
核心资产梳理
从需求等级、风险等级、节点等级 整理核心资产清单,定期补充更新
2、数据治理的思路
数据治理涵盖的范围比较广,不可能一次性全部进行,需要根据实际情况制定治理的阶段性目标,按照紧急程度、作用大小、工作量等执行合适的治理思路:
因为香港钱包整体的业务不是很大,任务数在七八百左右,中间层任务只有几十个,大部分是一些凌乱的应用层报表和圈人数据,所以我们决定先对中间层进行治理,通过对中间层的重新规划整合、信息完善,提高中间层整体的产出时效,降低ods穿透任务的比例,从而整体上提升计算效率,节约计算和存储资源。
要治理中间层,需要先从设计上来对数据的划分进行优化,这里要参考实际业务系统的架构设计、行业通用业务模型信息等,前后可能要修改调整很多次,所以需要做好快速迭代的准备,不要着急上线;
我们参考蚂蚁通用的域划分和业务过程,先进行域内中间层的初版设计,然后开始对应用层数据进行ods穿透扫描,整理出ods穿透任务清单,整体上先过一遍相关的加工逻辑,对ods表和字段有了全局上的认识;
这是一个非常繁琐和耗费时间的工作,要吐槽下平台:没有什么工具可以帮助,点了上千次鼠标,记录下ods表和字段,然后自己分析出高频使用的表和字段,作为中间层治理的需求参考;
接下来就简单了,分分合合,综合考虑上游数据产出时间、计算复杂度、下游使用频次,设计主线表和扩展线表;这里是纯经验的东西,需要根据实际情况慢慢思考总结;不要怕设计的不好,多迭代几次就明白了。
补充下关于是否借道上游中间层的问题,这里有一个比较重要的标准:上游中间层的完成时间是否够早? 因为作为数据中台的数据中间层,设计上是要优先考虑时效性的,如果为了整合过多的信息牺牲了时间,只能说设计上是有问题的;不要过多的等待上游进度,提高自身中间层效率才是最终目标。
3、治理进行时
数据目录重划分:
目录的设计就是数据体系的设计体现,如果你发现你们现在的数据目录混乱无序,说明大家在全局的体系设计这里没有思考,一个好的目录设计,会帮助我们理清思路,快速的查找定位数据和任务,某个层次、某个模块 这些都清晰的展示出来时,数据迭代的效率和质量就会有快速的提升了。
高频字段逻辑收归:
一些高频的函数处理字段、业务逻辑处理字段,尽早的在中间层阶段统一处理,不要为了方便在应用层直接处理;特别是一些UDF会对性能有很大的影响,多次重复计算整体代价会非常大;
复杂视图物理替换:
视图是一种在业务数据库时期的产物,为的是向上屏蔽数据细节,灵活调整,在数仓阶段不建议使用;如果有一些历史遗留的视图,直接替换的代价太大,可以通过先创建新的物理表,然后视图使用简单的查询逻辑替换;
高频查询逻辑替换:
经常会有一些高频使用的单表或者多表查询逻辑,在数据过滤比例较大或者计算成本很大的情况下,可以考虑抽象出中间层做物理表替换,但是非高频或者大比例过滤的场景就没必要处理了,没有降低计算和存储的综合成本。
ODS穿透替换:
这个是最大的一块工作,需要频繁的开发测试发布,所以建议分批多次处理;做好数据对比,快速发布上线;
高耗时任务优化:
需要先对各个层次的任务执行时间制定一个标准,在完成上述治理之后,对耗时较长的任务进行专项优化;因为每个项目的资源坑位都是有限的,大量长时间执行的任务会降低系统的整体吞吐效率;这里参考集团odps优化的文档即可,思路就是降低输入数据量,降低输入次数,大量distinct操作使用groupby替换等。
预聚合数据替换:
常规统计逻辑会有很多的重复代码存在,除了去重的逻辑无法使用预聚合数据,很多常规统计报表是可以使用预聚合数据的;在单用户高频行为的场景下可以做用户粒度的预聚合,评估预聚合后数据数量级上的变化,超过100倍的变化就有预聚合的需要了。
数据质量监控:
中间层资产、核心报表资产等需要对数据质量进行强监控,主要是数据重复、空表等情况的监控,一定要配置DQC强规则,尽可能对粒度不可控的数据资产进行粒度控制治理,预防好数据重复的风险,基本就能解决80%的数据质量问题。
4、数据对比的工具和方法
目前数据平台缺乏比较好用的数据对比工具和方法,特别是在大数据量多字段情况,我们目前采用的方法是较小的结果表,人工查询比对;较大的表使用pai上面的一个数据对比组件进行全量数据比对,但在字段较多数据量较大的情况下还是比较慢,这里暂时没有好的思路;后续的计划是在pai上开发几个特定场景的数据比对组件,看个人工作安排了,需要花时间学习。
5、数据治理的长效机制
周期性的数据资产管理——按月或者季度进行
周期性的高耗时任务治理——按月或者闲时进行
后记:
每次总结的时候经常会忘记做过的很多事情,但记住的都是印象比较深的,希望对大家有一定的参考价值~