0

我在我的项目中使用 DAS 3.0.1,我需要从执行计划中的事件表中读取数据。

实际上,我试图只更新事件表中的一列,但它只使用该列创建新条目,而不是在事件表中更新。

有没有办法通过在执行计划中应用过滤条件来仅更新特定列。

请建议。

4

2 回答 2

0

如果表中包含att1、att2、att3等几个属性。然后您可以如下定义表(如果名称是“YourEventTableName”)。

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

有一个流(如果名称是“YourEventStream”),您可以将流定义为

define stream YourEventStream (streamAtt int, streamAtt2 string);

假设,您需要从 YourEventStream 中的 streamAtt 属性值更新 tableAtt1 属性,在 tableAtt3 包含“aaa”的表行中。

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

假设,您需要从 YourEventStream 中的 streamAtt 属性值更新 tableAtt1 属性,在 tableAtt3 包含“aaa”的表行中。

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”中的一个属性。我在您的“InStream”中找不到名为“StatusDescription”的属性。无论如何,你需要做的是,

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

$streamAttributeName$ - 流属性的名称,其中包含更新特定列所需的值。

$tableColumnName$ - 是您需要在表中更新的列,可以是 PNumber、CNumber、SCode 字符串等。

$anotherStreamAttributeNameOrTheSame$ - 流属性的名称,其中包含表列和流之间应满足的值,以便更新表。这可以是流的属性名称

于 2016-08-04T07:04:09.730 回答
0

感谢您的回复。我试过了,但它对我不起作用。

我有一个事件表 NGPOCYTEST,我在其中存储以下参数。(PNumber int, CNumber string, SCode string, StatusDescription string, PCode string, UpDate string, PoDate string, CompanyID int, Product string);

我有一个流 NgStream 如下。(CNumber 字符串、CompanyAbbr 字符串、NgID 字符串、NgDate 字符串、NgCategory 字符串、NgReason 字符串、DocumentNumber 字符串、EventType 字符串、ResolveCode 字符串、ResolveDate 字符串)

让我详细告诉你业务需求。

我在 DAS 上收到了作为 http 请求的 NgStream(具有来自 NGPOCYTEST 表的不同参数)。我将此流存储在 DAS(SQL 服务器)中的单独表中。如果我收到此请求,我需要实时更新 NGPOCYTEST 中的状态(仅一列)。所以我写了一个执行计划来实时更新状态,如下所示。不幸的是,NGPOCYTEST 中的状态没有得到更新。如果我做错了什么,请告诉我。


@from(eventtable='analytics.table', jdbc.url='jdbc:sqlserver://localhost:1433;databaseName=###', username='***', password='****', 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


于 2016-08-04T17:47:05.903 回答