我在我的项目中使用DAS 3.0.1,我需要在执行计划中从事件表中读取数据。
实际上我只是尝试更新事件表中的一个列,但它只创建了一个只包含该列的新条目,而不是在事件表中更新。
是否有办法通过在执行计划中应用过滤条件来仅更新特定列。
请建议。
答案 0 :(得分:0)
如果表包含多个属性,例如att1,att2,att3。然后,您可以按如下方式定义表(如果名称为“YourEventTableName”)。
<html>
<head>
<title>Example Using Google Complete API</title>
</head>
<body>
<form>
<input id="geocomplete" type="text" placeholder="Type an address/location"/>
</form>
<script src="http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="http://ubilabs.github.io/geocomplete/jquery.geocomplete.js"></script>
<script>
$(function(){
$("#geocomplete").geocomplete();
});
</script>
</body>
</html>
theres是一个流(如果名称是“YourEventStream”),您可以将流定义为
define table YourEventTableName (tableAtt1 int, tableAtt2 string, tableAtt3 string);
假设您需要从YourEventStream中的streamAtt属性值更新tableAtt1属性,在包含“aaa”作为tableAtt3的表行中。
define stream YourEventStream (streamAtt int, streamAtt2 string);
假设您需要从YourEventStream中的streamAtt属性值更新tableAtt1属性,在包含“aaa”作为tableAtt3的表行中。
from YourEventStream
select streamAtt as tableAtt1
update YourEventTableName
on YourEventTableName.tableAtt3 == "aaa";
有关详细信息,请参阅Siddhi documentation。
验证您的查询时,我发现了一些问题。以下是您的更新查询。
from YourEventStream
select streamAtt as tableAtt1
update YourEventTableName
on YourEventTableName.tableAtt3 == streamAtt2;
查询的“select”部分应具有需要更新表的属性值。它应该是“InStream”中的属性。我在“InStream”中找不到名为“StatusDescription”的属性。无论如何你需要做的是,
from InStream
select StatusDescription as StatusDescription
update NGPOCYTEST
ON NGPOCYTEST.StatusDescription == StatusDescription
$ streamAttributeName $ - 流属性的名称,其中包含更新特定列所需的值。
$ tableColumnName $ - 是您需要在表中更新的列,可以是PNumber,CNumber,SCode字符串等。
$ anotherStreamAttributeNameOrTheSame $ - 流属性的名称,其中包含表列和流之间应该满足的值,以便更新表。这可以是流的属性名称
答案 1 :(得分:0)
感谢您的回复。我尝试过它,但它对我没用。
我有一个事件表NGPOCYTEST,我在其中存储以下参数。 (PNumber int,CNumber string,SCode string,StatusDescription string,PCode string,UpDate string,PoDate string,CompanyID int,Product string);
我有一个流NgStream如下所示。 (CNumber string,CompanyAbbr string,NgID string,NgDate string,NgCategory string,NgReason string,DocumentNumber string,EventType string,ResolveCode string,ResolveDate string)
让我详细告诉你业务需求。
我在DAS上收到的NgStream(来自NGPOCYTEST表的参数不同)作为http请求。我将此流存储在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') define stream InStream(CNumber string,CompanyAbbr string,NgID string,NgDate string,NgCategory string,NgReason string,DocuNo string,EvType string,ResCode string,ResDate string)
来自InStream的选择StatusDescription作为StatusDescription 更新NGPOCYTEST ON NGPOCYTEST.StatusDescription == StatusDescription