淘先锋技术网

首页 1 2 3 4 5 6 7

我想在本文说说数据质量,ETL任务管理和监控

 

数仓系列:

【数仓】数据仓库的思考(一):https://blog.csdn.net/lsr40/article/details/105576047

【数仓】数据仓库的建设(二):https://blog.csdn.net/lsr40/article/details/105639190

【数仓】数据仓库的元数据管理(三):https://blog.csdn.net/lsr40/article/details/105654112

 

一、数据质量

分为4个性质:

当然我看了不同的公司对于数据质量的性质和定义都不太一样,大家还是要按照自己的业务来啊!

1、一致性:

-1.一个数据值与设定的值之间的误差(是否可以接受误差,误差在百分之多少),举例:B表的上游表A有1000W条数据,做了百分之20的过滤,B表中的数据有800W,那么是合理的,又或者我只是同步数据,那么两张表的条数是否一样

-2.不同的组件传递数据时,记录丢失/重复/仅此一次,kafka中有三种语义,有些数据必须要确保Exactly_Once,特别是跟钱相关的数据(支付,订单,计费)

2、完整性

-1.数据的维度/内容是否够多够丰富

-2.字段值缺失,又叫字段填充率,某个字段缺失的厉害,是否需要优化?

3、时效性

数据是否能够按时生成,按时推送,数据的延迟时长是H+1,T+1或者其他/4、合理性

数据是否符合规律,是否应该唯一,有否存在巨大波动,可以比较周期,举例:今日每个小时的流量和7天前对应小时的流量是否符合趋势?表不同分区下的数据量是否合理,表数据的膨胀是否合理?最好是能做到支持一些自定义指标

 

二、数据监控

基于以上说的几种性质,我们对于的监控指标是这样的

数据还在数仓层面的时候,其实能够监控的维度不多
基本上就是总条数,PV,UV,环比,数据匹配率(join的场景下,会不会丢数据),或者聚合后的头部数据的对比

 

1、基于表

统计Count或者表实际占用的磁盘空间,PV(加group条件),UV(加group条件去重)可以提供几种默认报警规则根据平均值,上一次的值,或者7天前的值,与本次的值做比较,来设定是否报警,然后再提供自定义sql报警功能

2、基于字段

默认提供重复值校验,字段缺失率(为null或者空字符串的比例)打分,也可以自定义,如果是数值类型可以计算平均值,最大/最小,中位数,四分位数等指标

3、偏向产品

不同产品对数据分析就会有不同的要求,而且都不太一样

比如留存,获客啊,用户行为喜欢啊,这个就非常的繁多了,还是根据产品或者分析的经验来做自定义吧

 

有些公司会统计冷热数据,就是一张表,或者表中某段分区的数据,被使用的次数,这就需要判断当前所使用的数据库是否支持获得所有历史sql,并且对sql进行解析,不过也会有存储过程,视图被调用(但是实际并不知道使用了哪些表),这部分信息,我暂时只想到在存储过程中多做一步将相关信息插入自定义的etl_log表中,再对这张表做解析

 

三、ETL管理和监控

ETL基本上就是几个维度

1、ETL任务运行的情况

如果是自研框架的话,可以在每个步骤加个AOP做一些日志的打印,如果是纯hive的话,可以看yarn页面

甚至自己调用api看:

https://www.cnblogs.com/yurunmiao/p/4224137.html(Hive SQL运行状态监控(HiveSQLMonitor))

2、ETL任务开始,结束和消耗时间(轻量,适中,重量)

3、ETL的重要级别(是否涉及资产相关,是否是上游任务)

4、ETL成功失败的分析(这个一般调度框架都会知道,只是要考虑如何把消息整合到一起,写入同一个地方)

5、单独对某些类型的ETL做实时记录(比如spark任务,可以在跑完某一个步骤,往kafka推送一条跑数据的消息,这样就可以相对实时的监控到一些代码写成的ETL的日志情况,当长时间没有收到该任务的消息的时候,就可以做一些报警)

 

有些大公司对于数据质量有疑问,还会有提供单的流程,让对应的人解决,类似租阿里云服务器,遇到需要人来解决的问题,提个工单,但是小公司基本上找人还是简单的,可能就不需要这样的功能了

最后,记得不管是表还是ETL,一定一定要存有开发人员或者开发组,这样出了问题才好发邮件,打电话,发短信,找对应的人解决问题!

 

暂时就想到这么多吧,后续如果有其他的我会再补充!~

如果有什么还需要补充的或者各位有疑惑的,可以给我留言,相互探讨下

好累啊。。。。很疲惫,心累!