利用预警实现对数值字段变化的监控
需求背景
想要实现判断数据集中某个字段最新的数值跟上次更新的历史数据作对比,变化达到一定量(如每次增幅超过100)就预警通知一次, 观远BI里可以巧用ETL和预警功能实现这种需求。
示例:现在金额字段值是600,想要创建预警判断,当前更新的金额与上次更新的金额差值大于等于100时就通知一次。
实现方案
一、用ETL制作快照表
快照表制作请参考帮助文档 用ETL制作数据快照 。本场景里注意点如下:
1. 新数据:输入数据集数据变化较快,1天内更新多次的话,在ETL里对数据做必要处理后,新建计算字段用函数 now() 来给数据打上时间戳;数据变化较慢、更新频率较低的情况建议使用 current_date() 来标注数据更新日期即可。
2. 历史数据:如果数据集本身数据量较大,或者一天更新多次,快照表数据量会极速增加,建议对历史数据限制时间范围(例如仅保留最近7天数据,函数:now()- interval 7 days)来达到数据瘦身的效果。
3. ETL更新:这里建议跟随输入数据集触发更新。
ETL结构参考下图:
二、制作预警使用的数据集
1. 新建ETL,使用上一步得到的快照表作为输入数据集,使用窗口函数进行偏移计算,得到上次更新的数据值,然后和最新数据值相减计算差值。如果数据集一天只更新一次或者仅保留1条记录,那么在ETL里通过关联节点计算同环比也是可以的。
新建2个计算字段,数值类型「差值」和日期时间类型「最近更新时间」:
差值:[value]-lag([value],1,0)over(partition by [项目名] order by [更新时间]) --lag([value],1,0) 代表按照更新时间升序排列后取上一行数据,没有上一行时取0; 最近更新时间:max([更新时间])over(partition by null) --用来标记最新更新时间,因为预警一般仅需要预警最近一次更新的数据。
ETL预览效果如下图:
注释:偏移函数有 lag()、lead(),具体使用请参考 Spark窗口函数及应用。
2. 筛选差值大于等于100的数据,并且筛选最近一次更新的记录,选择需要输入的列后输出用于预警的数据集。如果需要保留历史预警记录,那么在筛选差值大于等于100的数据后可以输出新的结果集。本案例输出了2个结果集,上面一个用于保存预警记录并对变化数据做其他分析,下面一个用于最新数据预警。ETL结构参考下图。
三、对“差值”创建相应的预警
场景一:推送给指定人员相同的内容,数据更新后金希望推送一次,建议创建卡片并使用卡片预警。
场景二:对收件人有分发要求,希望推送数据明细给对应的负责人,建议使用数据集预警。