使用Blink SQL+UDAF实现差值聚合计算介绍了如何使用Blink SQL+UDAF实现实时流上的差值聚合计算,后来在与@付典就业务需求和具体实现方式进行探讨时,付典提出通过CEP实现的思路和方法。
本文介绍通过CEP实现实时流上的差值聚合计算。
感谢@付典在实现过程中的指导。笔者水平有限,若有纰漏,请批评指出。

一、客户需求

电网公司每天采集各个用户的电表数据(格式如下表),其中data_date为电表数据上报时间,cons_id为电表id,r1为电表度数,其他字段与计算逻辑无关,可忽略。为了后续演示方便,仅输入cons_id=100000002的数据。

no(string) data_date(string) cons_id(string) org_no(string) r1(double)
101 20190716 100000002 35401 13.76
101 20190717 100000002 35401 14.12
101 20190718 100000002 35401 16.59
101 20190719 100000002 35401 18.89

表1:输入数据
电网公司希望通过实时计算(Blink)对电表数据处理后,每天得到每个电表最近两天(当天和前一天)的差值数据,结果类似如下表:

cons_id(string) data_date(string) subDegreeR1(double)
100000002 20190717 0.36
100000002 20190718 2.47
100000002 20190719 2.3

表2:期望的输出数据

二、需求分析

根据业务需求以及CEP跨事件模式匹配的特性,定义两个CEP事件e1和e2,输出e2.r1-e1.r1即可得到差值。

三、CEP开发及测试结果

参考复杂事件处理(CEP)语句,CEP代码如下:

CREATE TABLE input_dh_e_mp_read_curve (`no`                  VARCHAR,data_date             VARCHAR,cons_id               VARCHAR,org_no                VARCHAR,r1                    DOUBLE,ts as TO_TIMESTAMP(concat(data_date,'000000'),'yyyyMMddHHmmss'),WATERMARK wk FOR ts as withOffset(ts, 2000)
) WITH (type = 'datahub',endPoint = 'http://dh-cn-shanghai.aliyun-inc.com',roleArn='acs:ram::XXX:role/aliyunstreamdefaultrole',project = 'jszc_datahub',topic = 'input_dh_e_mp_read_curve'
);CREATE TABLE data_out(cons_id varchar,data_date varchar,subDegreeR1 DOUBLE
)with(type = 'print'
);insert into data_out
selectcons_id,data_date,subDegreeR1
from input_dh_e_mp_read_curve
MATCH_RECOGNIZE(PARTITION BY cons_idORDER BY tsMEASURESe2.data_date as data_date,e2.r1 - e1.r1 as subDegreeR1ONE ROW PER MATCHAFTER MATCH SKIP TO NEXT ROWPATTERN(e1 e2)DEFINEe1 as TRUE,e2 as TRUE
);

由于使用了print connector,从对应的sink的taskmanager.out日志中可以查看到输出如下:

task-1> (+)100000002,20190717,0.35999999999999943
task-1> (+)100000002,20190718,2.4700000000000006

对比期望输出(表2),20190717和20190718两个窗口的数据均正确,表明业务逻辑正确,但此输出与期望输出有少许差异:
(1)20190719的数据没有输出,这是因为我们设置了watermark,测试环境下20190719之后没有数据进来触发20190719对应的窗口的结束。

四、其他说明

1、对比使用Blink SQL+UDAF实现差值聚合计算(1),我们可以看出使用CEP开发代码非常简洁,所以在跨事件处理的情况下CEP还是非常的合适。从另外一个方面讲,同样的需求有不同的实现方式,所以融会贯通Blink SQL中的各种语法,利用更合适的语法来实现业务需求,将可能大大提升工作效率和业务性能。
2、在实现本案例时,笔者发现使用CEP时有如下需要注意的地方:
(1)partiton by里的字段(如本案的cons_id),默认会带到输出里,若同时在MEASURES中定义,则可能会报类似如下错误:

(2)define及其内容必须定义,否则前端页面提示类似如下错误:

原文链接
本文为云栖社区原创内容,未经允许不得转载。

使用Blink CEP实现差值聚合计算相关推荐

  1. sql 差值_使用Blink CEP实现差值聚合计算

    简介: 本文介绍通过CEP实现实时流上的差值聚合计算. 使用Blink SQL+UDAF实现差值聚合计算介绍了如何使用Blink SQL+UDAF实现实时流上的差值聚合计算,后来在与@付典就业务需求和 ...

  2. 使用Blink SQL+UDAF实现差值聚合计算

    本案例根据某电网公司的真实业务需求,通过Blink SQL+UDAF实现实时流上的差值聚合计算,通过本案例,让读者熟悉UDAF编写,并理解UDAF中的方法调用关系和顺序. 感谢@军长在实现过程中的指导 ...

  3. php求两个数组的差值,数组计算差值及项的小计,该如何处理

    数组计算差值及项的小计 本帖最后由 lazygc520 于 2014-04-14 16:19:41 编辑 $s = array ( 0 => array ( 0 => array ( 0  ...

  4. JS-计算日期差值;计算日期之间的月数

    计算两天之间的日期差值 // 输入格式:yyyy-MM-DD function daysBetween(sDate1, sDate2) {//Date.parse() 解析一个日期时间字符串,并返回1 ...

  5. mysql 取差值_MySQL计算相邻两行某列差值的方法

    简述 博主最近因工作任务缠身,都无暇顾及到我的这片自留地了.前段时间稍有空闲,花了较多的精力学习<啊哈算法>,从中学习到很多之前没有太注重的内容,收益颇丰.但是这些算法题目还没有看完,等后 ...

  6. mysql timestamp 差值_SQL计算timestamp的差值实例分享

    本文主要介绍了SQL计算timestamp的差值的方法的相关资料,需要的朋友可以参考下,希望能帮助到大家. SQL计算timestamp的差值的方法 概述 有时候我们需要按照时间找出某些记录,比如说: ...

  7. python计算日期间的差值,python 计算时间、日期差值类

    环境:win10+python3x V:1.0 简单实现了一下功能本地测试可用,记录下次接着二次开发用 import datetime import re class TimeDifferenceC( ...

  8. php 计算数组的差值,数组计算差值及项的小计,该如何处理

    本帖最后由 lazygc520 于 2014-04-14 16:19:41 编辑 $s = array ( 0 => array ( 0 => array ( 0 => '2014- ...

  9. mysql计算两个月份之间的差值_MySQL计算两个日期相差的天数、月数、年数

    MySQL自带的日期函数TIMESTAMPDIFF计算两个日期相差的秒数.分钟数.小时数.天数.周数.季度数.月数.年数,当前日期增加或者减少一天.一周等等. SELECT TIMESTAMPDIFF ...

最新文章

  1. openpyxl模块介绍
  2. 研究发现大部分企业没有在云端采用Office 365
  3. unix环境高级编程-进程间通信
  4. 【项目管理】敏捷原则
  5. 如何启用 express debug 模式
  6. python声明编码格式_使用python将doc文件转为utf8编码格式的txt
  7. 一文看懂专有网络和交换机的定义及关系
  8. Python 实现简单的爬虫
  9. Android工程中追踪修改bug的总结
  10. C# 通用树形数据结构
  11. 基于matlab的模糊PID控制仿真
  12. 网络唤醒 php,go实现网络唤醒远程开机(Wake on Lan)
  13. Windows Terminal 快速安装
  14. 校园无线网登陆成功,但打开浏览器不能上网怎么办?标签上显示注销页怎么办?
  15. 战地2服务器地图修改,《战地2》地图修改秘籍
  16. VS2022写Qt代码遇到的问题之 C2504 “xxx”: 未定义基类 (编译源文件
  17. 最佳光圈值 (Optimum Aperture)
  18. Cobbler自动化装机服务详细介绍
  19. React解密:React高阶组件是什么?
  20. 洛谷 P1332 血色先锋队

热门文章

  1. php 共享内存列队,php中对共享内存,消息队列的操作
  2. python 安卓app开发环境搭建_基于react-native的APP开发环境配置
  3. 计算机三级数据库上机怎么考,最新计算机三级数据库上机考试试题
  4. leetcode 4 --- 寻找两个有序数组的中位数
  5. supermap iserver java 6r许可_SuperMap iserver Java 6R 在 linux 上安装和配置 | 学步园
  6. python罗马数字转换,Python3.5实现的罗马数字转换成整数功能示例
  7. java如何把png转换成jpg_Java实现将png格式图片转换成jpg格式图片的方法【测试可用】...
  8. ue4中在物体上加ui_UE4 物体位置同步相关源码分析浅谈
  9. 计算机一级b考试教程,全国计算机等级考试一级B教程
  10. 因为瘟疫,英国诞生了一个又一个的科学家