离线数仓(10):ODS层实现之业务数据核对
目录
2.2. ods_fmys_goods_ext_数据核对_CDM任务 节点说明
2.3. ods_fmys_goods_ext_数据核对_异常告警任务 节点说明
0. 相关文章链接
1. 目的
在ODS层中,业务数据是通过将业务库的binlog数据写入到数仓中,然后对数据进行聚合去重等操作,得到最新的数据;这样的话可能存在网络抖动等情况,导致数据部分丢失(虽然在大数据环境中,都实现了高可用,基本不会存在这样的情况),这时候就需要一个数据核对的作业,定时(一个星期一次)通过CDM从业务库拉取全量数据过来,然后和数仓中的数据对比;当完全相同的条数小于一个比例时(数仓中使用分钟级更新的视图,一般完全相同的条数要大于百分之99.99)就发出告警,及时被开发人员感知。
2. 调度任务创建
2.1. 概述
架构图:
说明:
- 该作业为周末空闲时间调度(每周一次,在集群资源空闲的时候即可);
- 该作业的目的是,快速从业务库拉取表到数仓中的临时表,然后和ods层的视图进行数据比对,当完全相同的条数低于某个比例时,就进行告警,将告警消息发送到飞书、钉钉等通信软件上;
- 因为ods层视图是分钟级更新,临时表也因为设置多并发故拉取数据较快,所以可以设置完全相同的数据条数要大于百分之99.99才算正常;
- 除了条数外,还可以使用其他数据核对口径,比如某一天某个小时的GMV、上架商品数等具体业务口径;
2.2. ods_fmys_goods_ext_数据核对_CDM任务 节点说明
设置高并发从业务库中拉取数据到数仓的临时表中(注意:在华为云中,当数仓结果表不为分区表时才能用高并发,并且结果表还要是外部表),CDM配置如下所示:
2.3. ods_fmys_goods_ext_数据核对_异常告警任务 节点说明
对比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脚本和对应的飞书机器人配置没有介绍,在具体使用时可以根据具体情况来实现(比如使用其他开源框架进行数据质量监控、钉钉机器人、电话告警等);如果要使用其他业务口径进行数据质量监控也可以同样配置。
注:其他 离线数仓 相关文章链接由此进 -> 离线数仓文章汇总
相关文章
- 将字典或者数组转换成JSON数据或者字符串
- 【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级
- 描述如何从网页提取结构化数据的语言:Parsley
- [破解] DRM-内容数据版权加密保护技术学习(中):License预发放实现
- 分布式数据中间件TDDL、Amoeba、Cobar、MyCAT架构比较
- 什么是数据治理?为什么华为愿意200万年薪聘数据治理专家?
- Atitit.列表页面and条件查询的实现最佳实践(1)------设置查询条件and提交查询and返回json数据
- Database之SQL:SQL语句操作三类(数据定义语句DDL/数据操作语句DML/数据控制语句DCL/其他基本语句、流程控制语句、批处理语句)概念及其代码实现案例之详细攻略
- PT之BERT:基于torch框架(特征编码+BERT作为文本编码器+分类器)针对UCI新闻数据集利用Transformer-BERT算法(模型实时保存)实现新闻文本多分类案例
- ML之FE:基于BigMartSales数据集利用Featuretools工具(1个dataframe表结构切为2个Entity表结构)实现自动特征工程之详细攻略
- ML之FE:在特征工程/数据预处理阶段对【类别型】特征变量进行处理的技术总结、经验技巧、案例应用之详细攻略
- DL之LiR&DNN&CNN:利用LiR、DNN、CNN算法对MNIST手写数字图片(csv)识别数据集实现(10)分类预测
- 对时间序列数据(牛仔裤销售数据集)进行LSTM预测(Matlab代码实现)
- 为什么抖音张同学这么火爆?用 Python 分析 1w+条评论数据,我发现了其中的秘密
- MATLAB | MATLAB海洋、气象数据colormap配色补充包(NCL color tables)
- java对象和json数据转换实现方式3-使用jackson实现
- Module 10:I/O流(java如何实现与外界数据的交流)
- Android kotlin 进阶之如何用greenDAO实现增删改查数据(拷贝assets下的db文件到data/data/applicationId/databases目录)
- 计算机网络 数据链路层 协议知识点总结
- PyTorch版yolov3训练自己的数据集
- pandas 数据透视表