正文
规则引擎:来定义各种告警规则,可能是一条sql模板,也可能是一些具体的算法。
执行引擎:要来执行各种规则,同时要考虑各种数据源的差异。
元数据系统:数据质量监控本来也算是元数据系统的一部分,我们这分开来讲,但是无论如何,在配置表的告警信息时,还是要和元数据系统结合的。
下面会分开来分析一下这几个组件。
举几个典型例子:数据延迟到达、数据同比环比、数据趋势、一些定制化算法。
这块的设计可以很灵活,也可以临时开发一个简单的。这里提几个点。
1.Sql模板
在大多数存储引擎中,通过Sql使用的数据(比如Hive、Mysql)会是比较重要的一种数据,这种数据我们可以考虑用Sql模板。
我们会有一张表或者一些配置文件来定义我们的规则。简单来讲,比如说数据同比环比,我们可以写一个presto的sql模板,来和历史数据进行对比,这种sql很简单,自己写好模板就行。
这种模板最简单,也最快,我相信能解决大部分问题。
2. 元数据
很多数据库都是有元数据管理的,比如Hive,它的表的行数都是在元数据库中有存放的,我们可以直接通过Hive的元数据来抓取表的每天的数据量的。
注意: 这点十分重要,它能节省我们大部分的工作,而且比较稳定,但是能满足的功能比较少。需要结合其它来使用。
3. 自定义模板
有很多算法不是简单的sql就能搞定的,而且很多存储系统也不是所有都支持sql。比如es这种。因此就需要一些定制化的算法来实现。
这方面的主要工作量应该是在执行引擎上,但是在规则引擎应该有设计到。
这块应该是比较重要的。 实现起来可以很简单,也可以很复杂。下面大概聊一下。
1.Sql执行
很多规则都可以通过sql来执行的,这点在规则引擎里面提到了。
其实我很推荐,刚开始的比较粗糙的监控都可以这样来做。 我们提前配置好大部分的sql模板,然后需要监控哪张表了就在这张表配置一下就行。
具体的执行引擎的话可以考虑presto或者spark sql,特别大的任务可以考虑hive。
优点:
缺点:
那么如何解决?
嗯,解决的话,我只有下面几个思路:
2. 直接获取数据量
前面提到了Sql执行的一个执行效率问题,我们这节提供一个优化的方法。因为Hive目前来讲是十分重要的一种引擎了,所以单说Hive。
Hive是有元数据管理的,它的元数据库中是记录Hive的所有表的记录数的,这些记录数可以直接用作数据量相关的监控,比如数据掉零、数据量环比同比、数据量趋势等。
3. 算法执行引擎
很多算法可以通过自定义地方式实现,这一点实现起来就会比较复杂一些。
因为定制化比较强,在设计这一块的话需要一个比较灵活的架构,这里不再展开来讲,因为在常见的数据领域里面,前两点已经能满足很多需求了。
4. 多数据源
多数据源这一块,在规则引擎里面需要加一些区分,因为这毕竟和元数据系统关联,区分还是比较简单。
在执行的时候,可能要稍微分开来实现。不过相对来讲不是很复杂。
本篇主要分享了一些和数据质量监控相关的内容,有一些泛泛而谈的感觉,但是理清思路后很多实现起来也是很简单的,
想做个简单能用的出来,用python半天就能搞定。
这里主要是思路,具体的实现就不再写了。毕竟根据业务需求,实现的程度也会不一样。
End