我在我的项目中使用 DAS 3.0.1,我需要从执行计划中的事件表中读取数据。
实际上,我试图只更新事件表中的一列,但它只使用该列创建新条目,而不是在事件表中更新。
有没有办法通过在执行计划中应用过滤条件来仅更新特定列。
请建议。
如果表中包含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$ - 流属性的名称,其中包含表列和流之间应满足的值,以便更新表。这可以是流的属性名称
感谢您的回复。我试过了,但它对我不起作用。
我有一个事件表 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