数据质量监控实现

在数据生成过程中,我们通常会以脚本执行成功与否来判断数据是否生成;但是这种判断逻辑会有一个问题:只能判断是否有数据,而不能对数据质量进行监控。举个简单例子:我们有一个脚本生成每日流量数据,20190410这一天生成了100w数据,20190411这一天只有50w数据,这明显不正常,出现这种情况必须马上核查问题所在,不然依赖这份数据的所有报表都会出问题;所以数据质量监控就很有必要,怎么做?就以这个例子为例尝试解决下。先画个图,假定是数据项监控页面结构
在这里插入图片描述
我们定义一些关注的指标,例如变量dayBeforeyestodayyesterday,每个变量后面都跟一个计算值的sql;有了这些变量后,接下来就是编写表达式

Math.abs(${yesterday}-${dayBeforeyesterday})/${dayBeforeyesterday}>0.1

这个表达式采用的是javascript语法,这个表达式的含义:如果昨天的数据量和前天的数据量误差超过10%,就进行报警;问题来了,怎样在后台解析执行判断表达式?其实在java里可以使用javax.script.ScriptEngine来实现这个功能,这就是为什么表达式要用javascript语法,看代码

ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("javascript");
        String expression = "Math.abs(${yesterday}-${dayBeforeyesterday})/${dayBeforeyesterday}>0.1";
        Map<String,String> values = new HashMap<String,String>();
        values.put("dayBeforeyesterday","1000340");
        values.put("yesterday","1110340");


        Set<String> strings = values.keySet();
        for(String k:strings){
            expression = expression.replaceAll("\\$\\{"+k+"}",values.get(k));
        }

        System.out.println("表达式:"+expression);

        try {
            String result = String.valueOf(scriptEngine.eval(expression));
            System.out.println(result);
        } catch (ScriptException e) {
            e.printStackTrace();
        }

输出

表达式:Math.abs(1110340-1000340)/1000340>0.1
true
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值