2016-08-03 4 views
0

実行計画でイベント・テーブルからデータを読み取る必要があるプロジェクトでDAS 3.0.1を使用しています。wso2の実行計画のイベント・テーブルからデータを読み取る方法DAS 3.0.1

実際にはイベントテーブルの1つの列のみを更新しようとしていますが、イベントテーブルで更新する代わりに、その列のみで新しいエントリを作成します。

実行計画にフィルタ条件を適用して特定の列のみを更新する方法はありますか。

お勧めします。

答えて

0

表にatt1、att2、att3などの複数の属性が含まれている場合。次に、次のようにテーブルを定義できます(名前が "YourEventTableName"の場合)。

define table YourEventTableName (tableAtt1 int, tableAtt2 string, tableAtt3 string); 

theresのストリーム(名前は「YourEventStream」である場合)は、

define stream YourEventStream (streamAtt int, streamAtt2 string); 

としてストリームを定義することができ、あなたが更新するtableAtt1属性をYourEventStreamでstreamAtt属性値から必要と仮定tableAtt3として "aaa"を含む表の行に挿入します。

from YourEventStream 
select streamAtt as tableAtt1 
update YourEventTableName 
    on YourEventTableName.tableAtt3 == "aaa"; 

は、更新するtableAtt1 YourEventStreamでstreamAtt属性値から属性を、tableAtt3として「AAA」が含まれている表の行に必要とします。

from YourEventStream 
select streamAtt as tableAtt1 
update YourEventTableName 
    on YourEventTableName.tableAtt3 == streamAtt2; 

詳細については、Siddhi documentationを参照してください。

あなたのクエリを検証する際にいくつかの問題が見つかりました。次は更新クエリです。

from InStream 
select StatusDescription as StatusDescription 
update NGPOCYTEST 
    ON NGPOCYTEST.StatusDescription == StatusDescription 

クエリの「選択」セクションには、テーブルを更新する必要がある属性値が必要です。そして、それは "InStream"の属性でなければなりません。私はあなたの "InStream"で "StatusDescription"という属性を見つけることができません。とにかく、あなたが何をする必要があるか

from InStream 
select $streamAttributeName$ as $tableColumnName$ 
update NGPOCYTEST 
    ON NGPOCYTEST.StatusDescription == $anotherStreamAttributeNameOrTheSame$ 

$ streamAttributeName $、である - あなたがから特定の列を更新する必要がある値を含むストリームの属性の名前。

$ tableColumnName $は - PNumber、CNumber、SCODE列など

$ anotherStreamAttributeNameOrTheSame $のいずれかになります、あなたのテーブルに更新する必要が列である - その値を含むストリームの属性の名前表を更新するためには、表の列とストリームの間で満足される必要があります。ストリームの属性名にすることができます

+0

感謝をStatusDescriptionを選択 。 – Joney

+0

これは私のために働いていません。以下のように私の回答を見てください。 – Joney

+0

Ramindu、私は上記の構文で試しましたが、私のために働いていません。私は以下のように実行計画を掲載しました。それを見直して、欠けているものがあれば教えてください。 – Joney

0

お返事ありがとうございます。私はそれを試みたが、それは私のために仕事をしなかった。

以下のパラメータを格納するイベントテーブルNGPOCYTESTが1つあります。 (PNumber int、CNumber文字列、SCode文字列、StatusDescription文字列、PCode文字列、UpDate文字列、PoDate文字列、CompanyID int、Product文字列);

私は以下のように1つのストリームNgStreamを持っています。 (CNumber文字列、CompanyAbbr列、NgID列、NgDate文字列、NgCategory文字列、NgReason列、DocumentNumber列、イベントタイプの文字列、ResolveCode列、ResolveDate文字列)

私は詳細ビジネス要件であなたを教えてみましょう。

httpリクエストとしてDASで受け取ったNgStream(NGPOCYTESTテーブルとは異なるパラメータを使用)があります。私はこのストリームをDAS(SQLサーバー)の別のテーブルに格納しています。 このリクエストを受け取った場合、NGPOCYTESTのステータス(1列のみ)をリアルタイムで更新する必要があります。 以下のように、ステータスをリアルタイムで更新する実行計画を作成しました。残念ながら、NGPOCYTESTのステータスは更新されていません。私が何か悪いことをしてくれたら教えてください。


@from(イベントテーブル= 'analytics.table'、jdbc.url = 'JDBC:のSQLServer:// localhostを:1433; databaseNameの= ###'、ユーザ名= '***'、パスワード= '****'、driver.name = 'com.microsoft.sqlserver.jdbc.SQLServerDriver'、table.name = 'NGPOCYTEST')

定義テーブルNGPOCYTEST(PNumber int、CNumber文字列、SCode文字列、StatusDescription文字列、PCode文字列、UpDate文字列、PoDate文字列、CompanyID int、Prdct文字列);

@import( 'NgStream:1.0.0') ストリームインストリームを定義する(CNumber列、CompanyAbbr列、NgID列、NgDate列、NgCategoryストリング、NgReason列、DocuNo列、EvType列、ResCode列、ResDate列)インストリームから

はNGPOCYTEST.StatusDescription == StatusDescription ON StatusDescription 更新NGPOCYTEST と応答のための


関連する問題