2016-08-09 26 views
0

Können wir Aktualisierungsanweisungen in einer On-Demand-Abfrage basierend auf bestimmten Kriterien schreiben? Ich versuche folgende Abfrage auszuführen: update ispersonam StockEventWindow Setpreis = 100 wo Preis> 250 und id = 10;Fehler beim Ausführen der Anweisung: Ungültige Null- oder Nullelementliste der Expressionstypen der SELECT-Klausel

Aber ich bin immer folgende Fehler Fehler Anweisung ausführen: Ungültige null oder Null-Element Liste der select-Klausel Ausdrucksarten [update istream StockEventWindow Setpreis = 100, wo der Preis> 250 und id = 10]

Meine Aufgabe ist, Ereignisse mit einem Preis größer als 250 nach einem bestimmten Zeitintervall von dem Zeitpunkt an, an dem das Ereignis empfangen wurde, zu aktualisieren.

Es wäre toll, wenn jemand eine Lösung mit einem Beispiel der Verwendung von Update-Abfrage bei Bedarf gibt. Geben Sie nach Möglichkeit auch ein Beispiel für die Verwendung des Löschbefehls in der On-Demand-Abfrage an.

Ich versuchte auf Anforderung aktualisieren und Befehle löschen, wie in esper Dokumentation 6.10.2 und 6.10.3 (Link) erwähnt. Aber es gibt Fehler.

, wenn ich Fehler folgend bin immer mit löschen: `com.espertech.esper.client.EPStatementSyntaxException: falsche Syntax in der Nähe von 'Löschen' (ein reserviertes Schlüsselwort) [aus StockEventWindow streichen id = 10] bei com.espertech .esper.epl.parse.ExceptionConvertor.convertStatement (ExceptionConvertor.java:40) bei com.espertech.esper.epl.parse.ParseHelper.parse (ParseHelper.java:121) bei com.espertech.esper.core.service .EPAdministratorHelper.compileEPL (EPAdministratorHelper.java:115) bei com.espertech.esper.core.service.EPAdministratorHelper.compileEPL (EPAdministratorHelper.java:88) at com.espertech.esper.core.service.EPRuntimeImpl.getExecuteMethod (EPRuntimeImpl .java: 1456) bei com.espertech.esper.core.service.EPRuntimeImpl.executeQueryInternal (EPRuntimeImpl.java:1414) bei com.espertech.esper.core.service.EPRuntimeImpl.executeQuery (EPRuntimeImpl.java:1407) bei com.cor. cep.handler.Listener.onDemandUpdate (Listener.java:155) bei com.cor.cep.handler.Listener.update (Listener.java:76) bei com.espertech.esper.core.service.StatementResultServiceImpl.dispatchInternal (StatementResultServiceImpl.java:389) unter com.espertech.esper.core.service.StatementResultServiceImpl.processDispatch (StatementResultServiceImpl.java:249) bei com.espertech.esper.core.service.StatementResultServiceImpl.execute (StatementResultServiceImpl.java:235) bei com.espertech.esper.core.service.UpdateDispatchViewBase.execute (UpdateDispatchViewBase.java:75) bei com.espertech.esper.core.service.UpdateDispatchFutureSpin.execute (UpdateDispatchFutureSpin.java:85) bei com.espertech.esper.dispatch.DispatchServiceImpl.dispatchFromQueue (DispatchServiceImpl.java:52) bei com.espertech.esper. dispatch.DispatchServiceImpl.dispatch (DispatchServiceImpl.java:31) bei com.espertech.esper.core.service.EPRuntimeImpl.dispatch (EPRuntimeImpl.java:1238) bei com.espertech.esper.core.service.EPRuntimeImpl.processTimeEvent (EPRuntimeImpl.java:529) bei com.espertech.esper.core.service.EPRuntimeImpl.processEvent (EPRuntimeImpl.java:423) bei com.espertech.esper.core.service.EPRuntimeImpl.sendEvent (EPRuntimeImpl.java:197) bei com.espertech.esper.core.service.EPRuntimeImpl.timerCallback (EPRuntimeImpl.java:171) bei com.espertech.esper.timer.EPLTimerTask.run (EPLTimerTask.java:61) bei java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511) bei java.util.concurrent.FutureTask. runAndReset (FutureTask.java:308) bei java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301 (ScheduledThreadPoolExecutor.java:180) bei java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:294) bei java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) bei java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) bei java.lang.Thread.run (Thread.java:745)

und wenn Aktualisierung mit es Fehler geben: com.espertech.esper.client.EPStatementSyntaxException: Incorrect syntax near 'StockEventWindow' expecting 'istream' but found an identifier at line 1 column 7 [update StockEventWindow set price = 200 where id = 10] at com.espertech.esper.epl.parse.ExceptionConvertor.convertStatement(ExceptionConvertor.java:40) at com.espertech.esper.epl.parse.ParseHelper.parse(ParseHelper.java:109) at com.espertech.esper.core.service.EPAdministratorHelper.compileEPL(EPAdministratorHelper.java:115) at com.espertech.esper.core.service.EPAdministratorHelper.compileEPL(EPAdministratorHelper.java:88) at com.espertech.esper.core.service.EPRuntimeImpl.getExecuteMethod(EPRuntimeImpl.java:1456) at com.espertech.esper.core.service.EPRuntimeImpl.executeQueryInternal(EPRuntimeImpl.java:1414) at com.espertech.esper.core.service.EPRuntimeImpl.executeQuery(EPRuntimeImpl.java:1407) at com.cor.cep.handler.Listener.onDemandUpdate(Listener.java:155) at com.cor.cep.handler.Listener.update(Listener.java:76) at com.espertech.esper.core.service.StatementResultServiceImpl.dispatchInternal(StatementResultServiceImpl.java:389) at com.espertech.esper.core.service.StatementResultServiceImpl.processDispatch(StatementResultServiceImpl.java:249) at com.espertech.esper.core.service.StatementResultServiceImpl.execute(StatementResultServiceImpl.java:235) at com.espertech.esper.core.service.UpdateDispatchViewBase.execute(UpdateDispatchViewBase.java:75) at com.espertech.esper.core.service.UpdateDispatchFutureSpin.execute(UpdateDispatchFutureSpin.java:85) at com.espertech.esper.dispatch.DispatchServiceImpl.dispatchFromQueue(DispatchServiceImpl.java:52) at com.espertech.esper.dispatch.DispatchServiceImpl.dispatch(DispatchServiceImpl.java:31) at com.espertech.esper.core.service.EPRuntimeImpl.dispatch(EPRuntimeImpl.java:1238) at com.espertech.esper.core.service.EPRuntimeImpl.processThreadWorkQueueLatchedSpin(EPRuntimeImpl.java:870) at com.espertech.esper.core.service.EPRuntimeImpl.processThreadWorkQueue(EPRuntimeImpl.java:778) at com.espertech.esper.core.service.EPRuntimeImpl.processWrappedEvent(EPRuntimeImpl.java:477) at com.espertech.esper.core.service.EPRuntimeImpl.processEvent(EPRuntimeImpl.java:438) at com.espertech.esper.core.service.EPRuntimeImpl.sendEvent(EPRuntimeImpl.java:197) at com.cor.cep.handler.StockEventHandler.handle(StockEventHandler.java:336) at com.cor.cep.util.RandomStockEventGenerator$1.run(RandomStockEventGenerator.java:63) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

+0

ist "StockEventWindow" ein benanntes Fenster? Der update-istream ist für Ereignisse im Flug gedacht. Zum Aktualisieren benannter Fensterereignisse verwende ich "on update". – goodie

+0

Ja StockEventWindow ist ein benanntes window.In esper Dokumentation ist geschrieben, dass wir update für benannte Fenster verwenden können, aber wenn ich die dort erwähnte Syntax verwende, gibt es einen Fehler mit dem Hinweis 'Inkorrekte Syntax nahe 'StockEventWindow' erwartet 'istream' aber gefunden eine Kennung in Zeile 1 Spalte 8 [Update StockEventWindow Setpreis = 200 mit ID = 10] '. – aru007

Antwort

1

Es gibt zwei APIS, eine für die Erstellung kontinuierlicher Abfragen (createEPL) und eine für die Ausführung von fire-and-for Abfragen erhalten (executeQuery). Es ist am besten, sie nicht zu verwechseln. Das "on update" ist eine kontinuierliche Abfrage und das "update window ..." ist eine Fire-and-Forget-Abfrage.