zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

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

数据 实现 10 业务 离线 数仓 ods
2023-09-14 09:14:56 时间

目录

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

  • 查询脚本:
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脚本和对应的飞书机器人配置没有介绍,在具体使用时可以根据具体情况来实现(比如使用其他开源框架进行数据质量监控、钉钉机器人、电话告警等);如果要使用其他业务口径进行数据质量监控也可以同样配置。


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