0

ストリーム内の空の値を更新せずに MySQL Db を更新する方法はありますか? 入力データ ストリームに空の値が含まれている場合、現在、その空の値は「data_empty」値を使用して示されます。その時点で、CEP はその値 ("data_empty") で DB を更新します。私の目標は、その空の値を更新せずに残りのものを更新することです。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;
4

1 に答える 1

3

空でない(シナリオでは「data_empty」ではない)値のみをデータベースに更新するのは、ちょっと難しいです。ただし、シッディに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;
于 2016-04-29T17:22:54.590 に答える