If we run below query it fails with UnknownException/NullPointerException in the UI
SELECT COUNT(*) AS "count","colB"
FROM (
SELECT "channel" AS "colB"
FROM (
SELECT *
FROM "wikiticker-Hour"
limit 100
) tmpA
) tmpA
GROUP BY colB
BROKER log show below trace:
java.lang.NullPointerException
at org.apache.druid.sql.calcite.rel.QueryMaker.findInnerMostQuery(QueryMaker.java:122) ~[druid-sql-0.16.0-incubating.jar:0.16.0-incubating]
at org.apache.druid.sql.calcite.rel.QueryMaker.runQuery(QueryMaker.java:98) ~[druid-sql-0.16.0-incubating.jar:0.16.0-incubating]
at org.apache.druid.sql.calcite.rel.DruidOuterQueryRel.runQuery(DruidOuterQueryRel.java:96) ~[druid-sql-0.16.0-incubating.jar:0.16.0-incubating]
at org.apache.druid.sql.calcite.planner.DruidPlanner$1.get(DruidPlanner.java:138) ~[druid-sql-0.16.0-incubating.jar:0.16.0-incubating]
at org.apache.druid.sql.calcite.planner.DruidPlanner$1.get(DruidPlanner.java:133) ~[druid-sql-0.16.0-incubating.jar:0.16.0-incubating]
at org.apache.druid.sql.calcite.planner.PlannerResult.run(PlannerResult.java:54) ~[druid-sql-0.16.0-incubating.jar:0.16.0-incubating]
at org.apache.druid.sql.SqlLifecycle.execute(SqlLifecycle.java:230) ~[druid-sql-0.16.0-incubating.jar:0.16.0-incubating]
at org.apache.druid.sql.http.SqlResource.doPost(SqlResource.java:108) [druid-sql-0.16.0-incubating.jar:0.16.0-incubating]
at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_211]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_211]
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) [jersey-server-1.19.3.jar:1.19.3]
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205) [jersey-server-1.19.3.jar:1.19.3]
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) [jersey-server-1.19.3.jar:1.19.3]
What is causing this :
private Query findInnerMostQuery(Query outerQuery)
{
Query query = outerQuery;
#Line 122 while (query.getDataSource() instanceof QueryDataSource) {
query = ((QueryDataSource) query.getDataSource()).getQuery();
}
return query;
}
It seems it is not able to compute the inner query when limit is placed into the inner queries
Druid 0.16
as described above
WorkAround (actually not a workaround, but something which works ):
If we remove the LIMIT clause from the query it works. i.e Below query works without any issue.
SELECT COUNT(*) AS "count","colB"
FROM (
SELECT "channel" AS "colB"
FROM (
SELECT *
FROM "wikiticker-Hour"
) tmpA
) tmpA
GROUP BY colB
@vaibhav-imply Thanks for reporting this. I will propose a PR to solve it.
Most helpful comment
@vaibhav-imply Thanks for reporting this. I will propose a PR to solve it.