簡體   English   中英

使用WSO2 CEP更新MySQL數據庫

[英]Update MySQL Database using WSO2 CEP

有什么方法可以更新MySQL Db而不更新流中的空值。 如果我的輸入數據流包含一些空值,則當前使用“ data_empty”值指示該空值。 那時,CEP使用該值(“ data_empty”)更新數據庫。 我的目標是不更新空值即可更新其余內容。 是否可以使用siddhi和WSO2 CEP。

@Plan:name('DBUpdateExecutionPlan')
@Import('testStream:1.0.0')
define stream input (id string, param1 string, param2 string);

@Export('testOutStream:1.0.0')
define stream output (id string, param1 string, param2 string);

@from(eventtable = 'rdbms' , datasource.name = 'MYSQL' , table.name = 'cep')
define table cepTable (id string, param1 string, param2 string) ;

from input#window.time(0 sec)
select * 
update cepTable on id == cepTable.id;

僅將非空值(在您的方案中不是'data_empty')值更新到數據庫有點困難。 但是在Siddhi中,有一個名為ifThenElse(condition, value if true, value if false)的函數,可以在您的方案中使用。 請參考下面的示例執行計划,以了解如何使用ifThenElse()和表更新(類似於您的用例)。

@Plan:name('IfThenElseExecutionPlan')

@Import('inputStream:1.0.0')
define stream dataIn (roomId int, roomType string, roomTemp float);

@Export('outputStream:1.0.0')
define stream dataOut (roomId int, roomType string, roomTemp float);

@From(eventtable='rdbms', datasource.name='cepdatabase', table.name='roomTable')
define table roomTable (roomId int, roomType string, roomTemp float);

from dataIn[not((roomTable.roomId == roomId) in roomTable)]
insert into updateStream;

from dataIn join roomTable
on roomTable.roomId == dataIn.roomId
select  dataIn.roomId as roomId, 
        ifThenElse(dataIn.roomType=='data_empty', roomTable.roomType, dataIn.roomType) as roomType, 
        ifThenElse(dataIn.roomTemp==0.0f, roomTable.roomTemp, dataIn.roomTemp) as roomTemp
insert into updateStream;

from updateStream
insert overwrite roomTable
on roomTable.roomId == roomId;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM