真实生产坏境下,源数据字段变更,下游应该怎么做
今天源数据字段有个变更上线,变更的内容是将数据质量的监控告警从规则检测粒度变成了一个job粒度
有关DQC,数据质量控制。owner可以在一张表上创建一个dqc job,对应一个dqc_id,一个dqc_id下可以有多个监控项,就比如一张表上可以配置多个监控项一个意思,之前的检测告警规则是:一次检测动作发生告警,就会通知owner一次,有时候一张表可能多个监控项都会告警,比如假期双休等,表的数据流增加是正常的行为,那么这样一个规则触碰一次告警发送肯定会造成一定负担,所以现在变更为了一个dqc job 粒度形式发送告警。就是一个dqc job下的多个规则发生告警,只会给owner发送一次告警信息
那么,源数据发生变更,下游数据怎么变更成了问题。
首先,在源数据发生变更之后,应该找对应的人员确定变更的内容、字段、表、时间等,也能够让我们做出判断对下游的影响。并且及时做出对应修改。
本次源数据变更,下游用到这些表的地方较多,大概可以看下图
可以看到字段变更之后,对下游使用到这些字段的影响是很大的,因为把字段拆成了两个字段,那么下游的表如果用到过这些字段,是都要变成更改的
所以思路是,尽可能在dwd或者dwb层找到能够连接两个表的数据,然后在这张表里进行更改,这样下游就不用那么多张表做出变动了。
怎么把本来分开的数据,现在再次变成一个呢?
因为dqc_id — 1:N --> business_rule — 1:1/2 —> check_rule
这种一对多的关系在连接的时候,怎么做到数据一致性而且还要输出想要的结果?
连接判断alert_level_name,采用双层case when then解决
造些数据测试一下:
数据准备,3张表,dqc、business、check
如下:
dqc:
dqc1 严重类型参数 普通类型参数
business:
dqc1 business1
dqc1 business2
check_rule
business1 check_rule1 严重
business1 check_rule2 普通
business2 check_rule3 普通
代码:
select dqc.dqc_id
,cr.business_id
,check_rule_id
,case when alarm_type='严重' then (case when fatal_alarm_type='严重类型参数' then '严重成功' else '严重没成功' end)
when alarm_type='普通' then (case when normal_alarm_type='普通类型参数' then '普通成功' else '普通没成功' end)
else '未知' end
alarm_id
,alarm_type
from dqc
join business_rule br
on dqc.dqc_id=br.dqc_id
join check_rule cr
on br.business_id = cr.business_id
结果:
dqc_id business_id check_id alarm_type alert_level_name
dqc1 business1 check_rule1 严重类型参数 严重
dqc1 business1 check_rule2 普通类型参数 普通
dqc1 business2 check_rule3 普通类型参数 普通
这 样 就 可 以 像 之 前 一 样 了 , 只 需 要 动 四 张 表 的 数 据 , 就 可 以 适 应 源 数 据 的 变 更 了 \color{#FF3030}{这样就可以像之前一样了,只需要动四张表的数据,就可以适应源数据的变更了} 这样就可以像之前一样了,只需要动四张表的数据,就可以适应源数据的变更了