使用wso2 CEP处理空值

时间:2016-09-14 07:28:11

标签: wso2 complex-event-processing wso2cep siddhi

我想使用其中一列不为空的附加条件更新事件表(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值的问题。有谁知道如何处理空值?

亲切的问候, 斯蒂芬

1 个答案:

答案 0 :(得分:1)

我遇到了与MySQL类似的问题。问题似乎在于CEP将Siddhi查询解析为SQL的方式。我做了一个快速的fix,它适用于我的场景。它也适用于你的情况,但是没有用Oracle测试过。要使用此修复程序(假设您使用的是CEP 4.2.0);

  1. siddhi-extension-event-table_3.1.2.jar目录中删除<cep>/repository/components/plugins/

  2. compiled jar添加到<cep>/repository/components/lib/行李。

  3. 使用以下查询;

    from incomingStream
    select  
        correlation_MSISDN as MSISDN, 
        INTERACTION_DT as INTERACTION_DT
    update MSISDNProfileDB
    on MSISDNProfileDB.MSISDN == MSISDN and not (MSISDNProfileDB.column1 is null);