2016-08-03 24 views
0

Ich verwende DAS 3.0.1 in meinem Projekt, wo ich Daten aus der Ereignistabelle im Ausführungsplan lesen muss.So lesen Sie Daten aus der Ereignistabelle im Ausführungsplan in wso2 DAS 3.0.1

Eigentlich versuche ich nur eine Spalte in der Ereignistabelle zu aktualisieren, aber es erstellt einen neuen Eintrag mit nur dieser Spalte, anstatt in der Ereignistabelle zu aktualisieren.

Gibt es eine Möglichkeit, nur bestimmte Spalten zu aktualisieren, indem Filterkriterien im Ausführungsplan angewendet werden.

Bitte vorschlagen.

Antwort

0

Wenn die Tabelle mehrere Attribute wie att1, att2, att3 enthält. Dann können Sie die Tabelle wie folgt definieren (wenn der Name "YourEventTableName" ist).

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

Der Theres einen Strom (wenn der Name "YourEventStream" ist) können Sie den Stream als

define stream YourEventStream (streamAtt int, streamAtt2 string); 

dass Angenommen definieren können, müssen Sie tableAtt1 Attribut aus dem streamAtt Attributwert in YourEventStream aktualisieren, in der Tabellenzeile, die "aaa" als tableAtt3 enthält.

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

Angenommen, müssen Sie aktualisieren tableAtt1 Attribut aus dem streamAtt Attributwert in YourEventStream, in der Tabellenzeile, die „aaa“ als tableAtt3 enthält.

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

Weitere Informationen finden Sie unter Siddhi documentation.

Bei der Validierung Ihrer Abfrage habe ich einige Probleme gefunden. Folgendes ist die Aktualisierungsabfrage, die Sie haben.

Der "Auswahl" -Abschnitt der Abfrage sollte die Attributwerte haben, die die Tabelle aktualisieren müssen. Und es sollte ein Attribut in "InStream" sein. Ich kann in Ihrem "InStream" kein Attribut namens "StatusDescription" finden. Wie auch immer, was Sie tun müssen, ist,

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

$ streamAttributeName $ - der Name des Stream-Attribut, die den Wert, den Sie von der bestimmten Spalte aktualisieren enthält.

$ tableColumnName $ - ist die Spalte, die Sie in Ihrer Tabelle zu aktualisieren, müssen die entweder sein pNumber, CNumber, SCode String usw.

$ anotherStreamAttributeNameOrTheSame $ - der Name des Stream-Attribut, das den Wert enthält, sollte zwischen der Tabellenspalte und dem Stream erfüllt sein, um die Tabelle zu aktualisieren. Dies kann ein Attributname des Streams sein.

+0

Vielen Dank für die Antwort. – Joney

+0

Das funktioniert nicht für mich. Bitte sehen Sie meine Antwort wie folgt. – Joney

+0

Ramindu, habe ich mit der obigen Syntax versucht, aber es funktioniert nicht für mich. Ich habe den Ausführungsplan wie folgt veröffentlicht. Könnten Sie es bitte überprüfen und lassen Sie mich wissen, wenn etwas fehlt. – Joney

0

Danke für die Antwort. Ich habe es versucht, aber es hat nicht für mich funktioniert.

Ich habe eine Ereignistabelle NGPOCYTEST, wo ich unter Parameter speichern. (PNumber int, CNumber-String, SCode-String, StatusDescription-String, PCode-String, UpDate-String, PoDate-String, CompanyID-Int, Produkt-String);

Ich habe einen Stream NgStream wie unten. (CNumber string, CompanyAbbr string, NgID string, NgDate string, NgCategory string, NgReason string, Document String, Eventtype string, ResolveCode string, ResolveDate string)

ich Ihnen im Detail Geschäftsanforderungen Lassen Sie sagen.

Ich habe NgStream (mit verschiedenen Parametern aus NGPOCYTEST-Tabellen) auf dem DAS als http-Anfrage erhalten. Ich speichere diesen Stream in einer separaten Tabelle in DAS (SQL Server). Wenn ich diese Anfrage erhalten habe, muss ich den Status (nur eine Spalte) im NGPOCYTEST in ECHTZEIT aktualisieren. Also habe ich einen Ausführungsplan geschrieben, um den Status in Echtzeit wie folgt zu aktualisieren. Leider wird der Status im NGPOCYTEST nicht aktualisiert. Bitte lassen Sie mich wissen, wenn ich etwas falsch gemacht habe.


@ Von (eventtable = 'analytics.table', jdbc.url = 'jdbc: sqlserver: // localhost: 1433; database = ###' username = '***', Passwort = '****', driver.name = 'com.microsoft.sqlserver.jdbc.SQLServerDriver', table.name = 'NGPOCYTEST')

Tabelle NGPOCYTEST definieren (PNumber int, CNumber Zeichenfolge, SCode Zeichenfolge, StatusDescription Zeichenfolge , PCode-Zeichenfolge, UpDate-Zeichenfolge, PoDate-Zeichenfolge, CompanyID-Int, Prdct-Zeichenfolge);

@Import ('NgStream: 1.0.0') definieren Strom InStream (CNumber string, CompanyAbbr string, NgID string, NgDate string, NgCategory string, NgReason string, DocuNo string, EvType string, ResCode string, ResDate string)

von InStream wählen StatusDescription als StatusDescription Update NGPOCYTEST ON NGPOCYTEST.StatusDescription == StatusDescription