Giovanni, Expression Language is evaluated before the SQL query. So in your case you end up with a query that looks like:
SELECT message, 2015-12-03T11:50:24-0500 AS lmt FROM FLOWFILE And it complains about the colon in the timestamp. Try putting the EL expression in quotes (I think double-quotes but I can't remember). Regards, Matt On Wed, Jun 7, 2017 at 10:51 AM, Giovanni Lanzani < [email protected]> wrote: > Hi Mark and Matt, > > > > I think, in the form I wrote it, it does not work. > > > > > > This is what the logs say > > > > java.lang.RuntimeException: parse failed: Encountered ":" at line 4, > column 16. > > Was expecting one of: > > <EOF> > > "ORDER" ... > > "LIMIT" ... > > "OFFSET" ... > > "FETCH" ... > > "FROM" ... > > "," ... > > "UNION" ... > > "INTERSECT" ... > > "EXCEPT" ... > > "MINUS" ... > > > > at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_( > CalcitePrepareImpl.java:750) > > at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_( > CalcitePrepareImpl.java:632) > > at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql( > CalcitePrepareImpl.java:602) > > at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery( > CalciteConnectionImpl.java:214) > > at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute( > CalciteMetaImpl.java:595) > > at org.apache.calcite.avatica.AvaticaConnection. > prepareAndExecuteInternal(AvaticaConnection.java:615) > > at org.apache.calcite.avatica.AvaticaStatement.executeInternal( > AvaticaStatement.java:148) > > at org.apache.calcite.avatica.AvaticaStatement.executeQuery( > AvaticaStatement.java:218) > > at org.apache.nifi.processors.standard.QueryRecord.query( > QueryRecord.java:481) > > at org.apache.nifi.processors.standard.QueryRecord. > onTrigger(QueryRecord.java:280) > > at org.apache.nifi.processor.AbstractProcessor.onTrigger( > AbstractProcessor.java:27) > > at org.apache.nifi.controller.StandardProcessorNode.onTrigger( > StandardProcessorNode.java:1118) > > at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask. > call(ContinuallyRunProcessorTask.java:144) > > at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask. > call(ContinuallyRunProcessorTask.java:47) > > at org.apache.nifi.controller.scheduling. > TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:132) > > at java.util.concurrent.Executors$RunnableAdapter. > call(Executors.java:511) > > at java.util.concurrent.FutureTask.runAndReset( > FutureTask.java:308) > > at java.util.concurrent.ScheduledThreadPoolExecutor$ > ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) > > at java.util.concurrent.ScheduledThreadPoolExecutor$ > ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) > > 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) > > > > This is the SQL query > > > > SELECT > > message, > > ${file.lastModifiedTime} AS lmt > > FROM > > FLOWFILE > > > > If I do the following it works > > > > SELECT > > message, > > CURRENT_TIME AS lmt > > FROM > > FLOWFILE > > > > (so that’s not a schema error). > > > > Giovanni Lanzani > Chief Science Officer GoDataDriven > T: @gglanzani > M: +31 6 5120 6163 > > > > *From: *Mark Payne <[email protected]> > *Sent: *Wednesday, June 7, 2017 4:03 PM > *To: *[email protected] > *Subject: *Re: Expression language in QueryRecord > > > > Giovanni, > > > > Yes, this should work. In the upcoming version 1.3.0, there is actually an > UpdateRecord processor that > > may actually be easier than this though. You'll be able to just add a > property named /lmt with a value of ${file.lastModifiedTime} and > > that will insert it for you. :) > > > > Thanks > > -Mark > > > > On Jun 7, 2017, at 9:59 AM, Giovanni Lanzani < > [email protected]> wrote: > > > > Sorry, hit send to quickly: > > > > Hi, > > > > Is it possible to do something like this in a QueryRecord processor: > > > > SELECT > > message, > > ${file.lastModifiedTime} AS lmt > > FROM > > FLOWFILE > > > > ? > > > > i.e. access a flowfile attribute? The Record Reader is a json, that has > the “message” field, the Record Writer is also a JSON, with a message and > lmt field. > > > > I was hoping that, in this way, it would have been easy to add attributes > to json’s (or other things) without using the Executescript processor > > > > (in reality I wanted some excuses to familiarize myself with all the new > goodies you introduced 😊) > > > > Thanks in advance, and sorry for the double email. > > > > Giovanni Lanzani > Chief Science Officer GoDataDriven > T: @gglanzani > M: +31 6 5120 6163 > > > > *From: *Giovanni Lanzani <[email protected]> > *Sent: *Wednesday, June 7, 2017 3:56 PM > *To: *[email protected] > *Subject: *Expression language in QueryRecord > > > > Hi, > > > > Is it possible to do something like this in a QueryRecord processor: > > > > SELECT > > message, > > ${file.lastModifiedTime} AS lmt > > > > Giovanni Lanzani > Chief Science Officer GoDataDriven > T: @gglanzani > M: +31 6 5120 6163 > > > > >
