我想使用其中一列不为空的附加条件更新事件表(RDBMS)。表名是MSISDNProfileDB,它位于oracle db。
from incomingStream#window.length(1)
select correlation_MSISDN as MSISDN,
INTERACTION_DT as INTERACTION_DT
update MSISDNProfileDB
on MSISDNProfileDB.MSISDN == MSISDN
and not(MSISDNProfileDB.column1 is null);
验证代码,但不更新INTERACTION_DT。出于测试目的,我更改了它以检查列是否为空,并手动从column1中删除数据。
from incomingStream#window.length(1)
select correlation_MSISDN as MSISDN,
INTERACTION_DT as INTERACTION_DT
update MSISDNProfileDB
on MSISDNProfileDB.MSISDN == MSISDN
and MSISDNProfileDB.column1 is null;
......它仍然无法正常工作。但是,当我将列值更改为1并执行此操作时:
from incomingStream#window.length(1)
select correlation_MSISDN as MSISDN,
INTERACTION_DT as INTERACTION_DT
update MSISDNProfileDB
on MSISDNProfileDB.MSISDN == MSISDN
and MSISDNProfileDB.column1 == '1';
它有效!所以,结论是cep有来自oracle db的null值的问题。有谁知道如何处理空值?
亲切的问候, 斯蒂芬
答案 0 :(得分:1)
我遇到了与MySQL类似的问题。问题似乎在于CEP将Siddhi查询解析为SQL的方式。我做了一个快速的fix,它适用于我的场景。它也适用于你的情况,但是没有用Oracle测试过。要使用此修复程序(假设您使用的是CEP 4.2.0);
从siddhi-extension-event-table_3.1.2.jar
目录中删除<cep>/repository/components/plugins/
。
将compiled jar添加到<cep>/repository/components/lib/
行李。
使用以下查询;
from incomingStream
select
correlation_MSISDN as MSISDN,
INTERACTION_DT as INTERACTION_DT
update MSISDNProfileDB
on MSISDNProfileDB.MSISDN == MSISDN and not (MSISDNProfileDB.column1 is null);