如何从wso2 DAS 3.0.1中的执行计划中的事件表中读取数据

时间:2016-08-03 17:59:09

标签: wso2 wso2-das

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

实际上我只是尝试更新事件表中的一个列,但它只创建了一个只包含该列的新条目,而不是在事件表中更新。

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

请建议。

2 个答案:

答案 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&amp;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