This post was updated on .
Hello,
I am trying to build an query using the StreamTableEnvironment API. I Am trying to build this queries with tableEnvironment.sql("QUERY") so that I can in the future load those queries from a file. Code source: Table accesses = tableEnvironment.sql ("SELECT STREAM TUMBLE_END(rowtime, INTERVAL '1' HOUR) AS rowtime, user,ip " + "FROM eventData " + "WHERE action='denied' " + "GROUP BY TUMBLE(rowtime, INTERVAL '1' HOUR) user,ip" + " HAVING COUNT(user,ip) > 5"); But I always get the following error: Caused by: org.apache.calcite.runtime.CalciteContextException: From line 1, column 120 to line 1, column 153: No match found for function signature TUMBLE(<TIME>, <INTERVAL_DAY_TIME>) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:405) at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:765) at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:753) at org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:3929) at org.apache.calcite.sql.validate.SqlValidatorImpl.handleUnresolvedFunction(SqlValidatorImpl.java:1544) at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:278) at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:222) at org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:4266) at org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:4253) at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:135) at org.apache.calcite.sql.validate.SqlValidatorImpl.deriveTypeImpl(SqlValidatorImpl.java:1462) at org.apache.calcite.sql.validate.SqlValidatorImpl.deriveType(SqlValidatorImpl.java:1445) at org.apache.calcite.sql.SqlNode.validateExpr(SqlNode.java:233) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateGroupClause(SqlValidatorImpl.java:3305) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:2959) at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60) at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:86) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:845) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:831) at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:208) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:807) at org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:523) at org.apache.flink.api.table.FlinkPlannerImpl.validate(FlinkPlannerImpl.scala:84) ... 10 more Caused by: org.apache.calcite.sql.validate.SqlValidatorException: No match found for function signature TUMBLE(<TIME>, <INTERVAL_DAY_TIME>) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:405) at org.apache.calcite.runtime.Resources$ExInst.ex(Resources.java:514) What am I doing wrong? I've attached my pom.xml file with all the dependencies. pom.xml Regards.
Best Regards,
Pedro Chaves |
Hi Pedro, support for window aggregations in SQL and Table API is currently work in progress. We have a pull request for the Table API and will add this feature for the next release. For SQL we depend on Apache Calcite to include the TUMBLE keyword in its parser and optimizer. 2016-10-12 18:51 GMT+02:00 PedroMrChaves <[hidden email]>: Hello, |
Hi,
Thanks for the response. What would be the easiest way to do this query using the DataStream API? Thank you.
Best Regards,
Pedro Chaves |
Hi Pedro, the DataStream program would like this: val eventData: DataStream[?] = ??? val result = eventData 2016-10-13 12:45 GMT+02:00 PedroMrChaves <[hidden email]>: Hi, |
This post was updated on .
I have this so far:
result = eventData .filter(new FilterFunction<Event>(){ public boolean filter(Event event){ return event.action.equals("denied"); } }) .keyBy(0) .timeWindow(Time.seconds(10)) .apply("???") .filter(new FilterFunction<Integer>(){ public boolean filter(Integer count){ return count.intValue() > 5 } }); I don't know what can I put in the apply function in order to the count of pairs (user,ip ) whose action="denied. Is there any documentation other than https://ci.apache.org/projects/flink/flink-docs-release-1.1/apis/streaming/index.html that I can use in order to get more information? I Just started with Flink and I still have difficulties with the API. Regards.
Best Regards,
Pedro Chaves |
apply() accepts a WindowFunction which is essentially the same as a GroupReduceFunction, i.e., you have an iterator over all events in the window. If you only want to count, you should have a look at incremental window aggregation with a ReduceFunction or FoldFunction [1]. 2016-10-13 14:37 GMT+02:00 PedroMrChaves <[hidden email]>: I have this so far: |
Free forum by Nabble | Edit this page |