• 离线数仓(10):ODS层实现之业务数据核对


    目录

    0. 相关文章链接

    1. 目的

    2. 调度任务创建

    2.1. 概述

    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脚本就会将告警消息发送到飞书告警群中,具体查询脚本和告警配置如下所示:

    • 查询脚本:
    1. select
    2. 'ods_fmys_goods_ext_数据核对' as 作业名
    3. , '完全相同条数比例过低' as 统计口径
    4. , result as 完全相同条数比例值
    5. from (
    6. select
    7. same_cnt / all_cnt as result
    8. from(
    9. select
    10. count(*) as same_cnt
    11. from(
    12. select
    13. concat(goods_id, limit_day, auto_time, is_new, grade, season, goods_type) as all_data
    14. from ${yishou_data_dbname}.ods_fmys_goods_ext
    15. ) as view
    16. inner join(
    17. select
    18. concat(goods_id, limit_day, auto_time, is_new, grade, season, goods_type) as all_data
    19. from ${yishou_data_dbname}.ods_fmys_goods_ext_temp
    20. ) as temp_table
    21. on view.all_data = temp_table.all_data
    22. ) as same_table
    23. full join (
    24. select
    25. count(*) as all_cnt
    26. from ${yishou_data_dbname}.ods_fmys_goods_ext
    27. ) as all_table
    28. on 1 = 1
    29. having result < 0.9999
    30. )
    • 告警参数:
    -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
    • 告警参数说明:
    1. -q "执行的SQL"
    2. -t dli
    3. -n ods_fmys_goods_ext_数据核对
    4. -d 数据异常
    5. -g dev
    6. -b N
    7. -q :执行的SQL
    8. -t :环境(全部都是华为云的DLI)
    9. -n :告警的主题名
    10. -d :告警的口径
    11. -g :环境(开发、测试、生产)
    12. -b :是否阻断(即当告警时,后续依赖作业是否正常运行)
    • 配置界面图:

    • 告警展示(不是此个告警,但展示样子类似):

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


    注:其他 离线数仓 相关文章链接由此进 -> 离线数仓文章汇总


  • 相关阅读:
    [Jdk版本不一致问题 ]终端查看jdk版本不一致
    Monaco Editor教程(十四):monaco中的位置区间Range类型的详细解释
    23种设计模式之模板方法模式(Template Method Pattern)
    js “2018/01-2018/12“转为“2018年01月-2018年12月“,字符串的替换和插入
    如何设计实时聊天系统的架构
    猿创征文|Redis的知识总结与项目应用
    Opencv项目实战:15 手势缩放图片
    Spring Security 介绍中的 servlet 和 reactive
    在网络安全对抗中,供应链攻击的手法有哪些?
    2022-05-14前端周报 巴厘岛项目交接完成
  • 原文地址:https://blog.csdn.net/yang_shibiao/article/details/126663392