Flink-DataStream上的多事件依赖SQL查询

问题描述

未得到预期的行为,我的flink应用程序遇到了实时事件,而触发条件则取决于两个事件ABC和XYZ。当两个事件都到达时,则触发通知

应用程序正在使用StreamTableEnviornment

这是我正在使用的SQL查询

SELECT  * 
from EventTable 
where eventName in ('ABC','XYZ') 
and 1 IN (select 1 from EventTable where name='XYZ') 
and 1 IN (select 1 from EventTable where name='ABC')

用例:1

ABC事件到来->一切都没有发生(按预​​期并正在等待XYZ事件)

XYZ事件到->条件匹配和SQL查询给出两个事件记录(ABC和XYZ),并触发通知(如预期)

再次,如果我发送“ ABC”事件,则SQL查询会给出结果ABC事件和已触发的通知

我期望查询不会给出结果,因为只有一个事件ABC到达并且将等待事件XYZ。你能帮我这个忙吗?我是否缺少某些东西以获得预期的结果?

解决方法

将第二个ABC添加到动态表时,第一个XYZ已经存在,因此满足条件。在输入表中添加第三行会导致在输出表中追加新一行。

请参阅文档中的Dynamic Tables,以获取有关基础模型的基本信息。SQL