Как прочитать данные из таблицы событий в плане выполнения в wso2 DAS 3.0.1

Я использую DAS 3.0.1 в своем проекте, где мне нужно прочитать данные из таблицы событий в плане выполнения.

На самом деле я пытаюсь обновить только один столбец в таблице событий, но он создает новую запись только с этим столбцом вместо обновления в таблице событий.

Есть ли способ обновить только определенный столбец, применив критерии фильтра в плане выполнения.

Пожалуйста, предложите.


person Joney    schedule 03.08.2016    source источник


Ответы (2)


Спасибо за ответ. Я пробовал с ним, но это не сработало для меня.

У меня есть одна таблица событий NGPOCYTEST, в которой я храню следующие параметры. (целое число PNumber, строка CNumber, строка SCode, строка StatusDescription, строка PCode, строка UpDate, строка PoDate, целое значение CompanyID, строка продукта);

У меня есть один поток NgStream, как показано ниже. (строка CNumber, строка CompanyAbbr, строка NgID, строка NgDate, строка NgCategory, строка NgReason, строка DocumentNumber, строка EventType, строка ResolveCode, строка ResolveDate)

Позвольте мне подробно рассказать вам о бизнес-требованиях.

У меня есть NgStream (с разными параметрами из таблиц NGPOCYTEST), полученный на DAS как http-запрос. Я сохраняю этот поток в отдельной таблице в DAS (сервер SQL). Если я получил этот запрос, мне нужно обновить статус (только один столбец) в NGPOCYTEST в РЕАЛЬНОМ ВРЕМЕНИ. Поэтому я написал план выполнения для обновления статуса в режиме реального времени, как показано ниже. К сожалению, статус в NGPOCYTEST не обновляется. Пожалуйста, дайте мне знать, если я сделал что-то не так.


@from(eventtable='analytics.table', jdbc.url='jdbc:sqlserver://localhost:1433;databaseName=###', имя пользователя='***', пароль='****', driver.name='com.microsoft.sqlserver.jdbc.SQLServerDriver', table.name='NGPOCYTEST')

определить таблицу NGPOCYTEST (PNumber int, CNumber string, SCode string, StatusDescription string, PCode string, UpDate string, PoDate string, CompanyID int, Prdct string);

@Import('NgStream:1.0.0') определить поток InStream (строка CNumber, строка CompanyAbbr, строка NgID, строка NgDate, строка NgCategory, строка NgReason, строка DocuNo, строка EvType, строка ResCode, строка ResDate)

из InStream выберите StatusDescription как обновление StatusDescription NGPOCYTEST ON NGPOCYTEST.StatusDescription == StatusDescription


person Joney    schedule 04.08.2016

Если таблица содержит несколько атрибутов, таких как att1, att2, att3. Затем вы можете определить таблицу (если имя «YourEventTableName») следующим образом.

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

Есть поток (если имя "YourEventStream"), вы можете определить поток как

define stream YourEventStream (streamAtt int, streamAtt2 string);

Предположим, что вам нужно обновить атрибут tableAtt1 из значения атрибута streamAtt в YourEventStream, в строке таблицы, которая содержит «aaa» как tableAtt3.

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

Предположим, что вам нужно обновить атрибут tableAtt1 из значения атрибута streamAtt в YourEventStream, в строке таблицы, которая содержит «aaa» как tableAtt3.

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

Дополнительную информацию см. в документации Siddhi.

При проверке вашего запроса я обнаружил некоторые проблемы. ниже приведен запрос на обновление, который у вас есть.

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

раздел «выбрать» запроса должен иметь значения атрибутов, необходимые для обновления таблицы. И это должен быть атрибут в "InStream". Я не могу найти атрибут «StatusDescription» в вашем «InStream». В любом случае, что вам нужно сделать, это,

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

$streamAttributeName$ — имя атрибута потока, который содержит значение, из которого необходимо обновить конкретный столбец.

$tableColumnName$ — это столбец, который вам нужно обновить в вашей таблице, который может быть либо PNumber, CNumber, строкой SCode и т. д.

$anotherStreamAttributeNameOrTheSame$ - имя атрибута потока, который содержит значение, которое должно быть удовлетворено между столбцом таблицы и потоком для обновления таблицы. Это может быть имя атрибута потока

person Ramindu De Silva    schedule 04.08.2016
comment
Спасибо за ответ. - person Joney; 04.08.2016
comment
Это не работает для меня. Пожалуйста, смотрите мой ответ, как показано ниже. - person Joney; 05.08.2016
comment
Ramindu, я пробовал использовать приведенный выше синтаксис, но он у меня не работает. Я разместил план выполнения, как показано ниже. Не могли бы вы просмотреть его и сообщить мне, если что-то отсутствует. - person Joney; 08.08.2016