目录
2.2. ods_fmys_goods_ext_数据核对_CDM任务 节点说明
2.3. ods_fmys_goods_ext_数据核对_异常告警任务 节点说明
在ODS层中,业务数据是通过将业务库的binlog数据写入到数仓中,然后对数据进行聚合去重等操作,得到最新的数据;这样的话可能存在网络抖动等情况,导致数据部分丢失(虽然在大数据环境中,都实现了高可用,基本不会存在这样的情况),这时候就需要一个数据核对的作业,定时(一个星期一次)通过CDM从业务库拉取全量数据过来,然后和数仓中的数据对比;当完全相同的条数小于一个比例时(数仓中使用分钟级更新的视图,一般完全相同的条数要大于百分之99.99)就发出告警,及时被开发人员感知。
架构图:

说明:
设置高并发从业务库中拉取数据到数仓的临时表中(注意:在华为云中,当数仓结果表不为分区表时才能用高并发,并且结果表还要是外部表),CDM配置如下所示:

对比ods层视图 和 前述节点从业务库中拉到数仓的临时表数据,当完全相同的数据条数小于百分之99.99时,就触发告警;博主这里是使用的python脚本,通过python调用华为云DLI接口跑SQL,当结果异常时python脚本就会将告警消息发送到飞书告警群中,具体查询脚本和告警配置如下所示:
- select
- 'ods_fmys_goods_ext_数据核对' as 作业名
- , '完全相同条数比例过低' as 统计口径
- , result as 完全相同条数比例值
- from (
- select
- same_cnt / all_cnt as result
- from(
- select
- count(*) as same_cnt
- from(
- select
- concat(goods_id, limit_day, auto_time, is_new, grade, season, goods_type) as all_data
- from ${yishou_data_dbname}.ods_fmys_goods_ext
- ) as view
-
- inner join(
- select
- concat(goods_id, limit_day, auto_time, is_new, grade, season, goods_type) as all_data
- from ${yishou_data_dbname}.ods_fmys_goods_ext_temp
- ) as temp_table
- on view.all_data = temp_table.all_data
- ) as same_table
-
- full join (
- select
- count(*) as all_cnt
- from ${yishou_data_dbname}.ods_fmys_goods_ext
- ) as all_table
- on 1 = 1
- having result < 0.9999
- )
-q "select 'ods_fmys_goods_ext_数据核对' as 作业名 , '完全相同条数比例过低' as 统计口径 , result as 完全相同条数比例值 from( select same_cnt / all_cnt as result from( select count(*) as same_cnt from( select concat(goods_id, limit_day, auto_time, is_new, grade, season, goods_type) as all_data from ${yishou_data_dbname}.ods_fmys_goods_ext) as view inner join( select concat(goods_id, limit_day, auto_time, is_new, grade, season, goods_type) as all_data from ${yishou_data_dbname}.ods_fmys_goods_ext_temp ) as temp_table on view.all_data = temp_table.all_data ) as same_table full join ( select count(*) as all_cnt from ${yishou_data_dbname}.ods_fmys_goods_ext ) as all_table on 1 = 1 having result < 0.9999 )" -t dli -n ods_fmys_goods_ext_数据核对 -d 数据异常 -g dev -b N
- -q "执行的SQL"
- -t dli
- -n ods_fmys_goods_ext_数据核对
- -d 数据异常
- -g dev
- -b N
-
- -q :执行的SQL
- -t :环境(全部都是华为云的DLI)
- -n :告警的主题名
- -d :告警的口径
- -g :环境(开发、测试、生产)
- -b :是否阻断(即当告警时,后续依赖作业是否正常运行)


说明:上述只介绍了在调度任务中的告警,但使用的python脚本和对应的飞书机器人配置没有介绍,在具体使用时可以根据具体情况来实现(比如使用其他开源框架进行数据质量监控、钉钉机器人、电话告警等);如果要使用其他业务口径进行数据质量监控也可以同样配置。
注:其他 离线数仓 相关文章链接由此进 -> 离线数仓文章汇总