网站设计 推广,羽毛球最新赛事,北京搬家公司收费价目表,wordpress自适应淘宝客主题使用Blink SQLUDAF实现差值聚合计算介绍了如何使用Blink SQLUDAF实现实时流上的差值聚合计算#xff0c;后来在与付典就业务需求和具体实现方式进行探讨时#xff0c;付典提出通过CEP实现的思路和方法。 本文介绍通过CEP实现实时流上的差值聚合计算。 感谢付典在实现过程中的…使用Blink SQLUDAF实现差值聚合计算介绍了如何使用Blink SQLUDAF实现实时流上的差值聚合计算后来在与付典就业务需求和具体实现方式进行探讨时付典提出通过CEP实现的思路和方法。 本文介绍通过CEP实现实时流上的差值聚合计算。 感谢付典在实现过程中的指导。笔者水平有限若有纰漏请批评指出。
一、客户需求
电网公司每天采集各个用户的电表数据格式如下表其中data_date为电表数据上报时间cons_id为电表idr1为电表度数其他字段与计算逻辑无关可忽略。为了后续演示方便仅输入cons_id100000002的数据。
no(string)data_date(string)cons_id(string)org_no(string)r1(double)101201907161000000023540113.76101201907171000000023540114.12101201907181000000023540116.59101201907191000000023540118.89
表1输入数据 电网公司希望通过实时计算Blink对电表数据处理后每天得到每个电表最近两天当天和前一天的差值数据结果类似如下表
cons_id(string)data_date(string)subDegreeR1(double)100000002201907170.36100000002201907182.47100000002201907192.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,roleArnacs: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
对比期望输出表220190717和20190718两个窗口的数据均正确表明业务逻辑正确但此输出与期望输出有少许差异 120190719的数据没有输出这是因为我们设置了watermark测试环境下20190719之后没有数据进来触发20190719对应的窗口的结束。 四、其他说明
1、对比使用Blink SQLUDAF实现差值聚合计算1我们可以看出使用CEP开发代码非常简洁所以在跨事件处理的情况下CEP还是非常的合适。从另外一个方面讲同样的需求有不同的实现方式所以融会贯通Blink SQL中的各种语法利用更合适的语法来实现业务需求将可能大大提升工作效率和业务性能。 2、在实现本案例时笔者发现使用CEP时有如下需要注意的地方 1partiton by里的字段如本案的cons_id默认会带到输出里若同时在MEASURES中定义则可能会报类似如下错误 (2)define及其内容必须定义否则前端页面提示类似如下错误 原文链接 本文为云栖社区原创内容未经允许不得转载。