somu-imply commented on code in PR #13976:
URL: https://github.com/apache/druid/pull/13976#discussion_r1152306174
##########
sql/src/test/java/org/apache/druid/sql/calcite/CalciteArraysQueryTest.java:
##########
@@ -4168,4 +4169,118 @@ public void
testUnnestWithMultipleOrFiltersOnUnnestedColumnsAndOnOriginalColumnD
)
);
}
+
+ @Test
+ public void testUnnestWithCountOnColumn()
+ {
+ skipVectorize();
+ cannotVectorize();
+ testQuery(
+ "SELECT count(*) d3 FROM druid.numfoo, UNNEST(MV_TO_ARRAY(dim3)) as
unnested (d3)",
+ QUERY_CONTEXT_UNNEST,
+ ImmutableList.of(
+ Druids.newTimeseriesQueryBuilder()
+ .dataSource(UnnestDataSource.create(
+ new TableDataSource(CalciteTests.DATASOURCE3),
+ expressionVirtualColumn("j0.unnest", "\"dim3\"",
ColumnType.STRING),
+ null
+ ))
+ .intervals(querySegmentSpec(Filtration.eternity()))
+ .context(QUERY_CONTEXT_UNNEST)
+ .aggregators(aggregators(new CountAggregatorFactory("a0")))
+ .build()
+ ),
+ ImmutableList.of(
+ new Object[]{8L}
+ )
+ );
+ }
+
+ @Test
+ public void testUnnestWithGroupByHavingSelector()
+ {
+ skipVectorize();
+ cannotVectorize();
+ testQuery(
+ "SELECT d3, COUNT(*) FROM druid.numfoo, UNNEST(MV_TO_ARRAY(dim3)) AS
unnested(d3) GROUP BY d3 HAVING d3='b'",
+ QUERY_CONTEXT_UNNEST,
+ ImmutableList.of(
+ GroupByQuery.builder()
+ .setDataSource(UnnestDataSource.create(
+ new TableDataSource(CalciteTests.DATASOURCE3),
+ expressionVirtualColumn("j0.unnest", "\"dim3\"",
ColumnType.STRING),
+ null
+ ))
+ .setInterval(querySegmentSpec(Filtration.eternity()))
+ .setContext(QUERY_CONTEXT_UNNEST)
+ .setDimensions(new DefaultDimensionSpec("j0.unnest",
"_d0", ColumnType.STRING))
+ .setGranularity(Granularities.ALL)
+ .setDimFilter(selector("j0.unnest", "b", null))
Review Comment:
In this example the having is on the unnested column and not on the aggrgate
so Calcite optimization treated it as a where. We also have an example in our
test suite `SELECT d3, COUNT(*) FROM druid.numfoo, UNNEST(MV_TO_ARRAY(dim3)) AS
unnested(d3) GROUP BY d3 HAVING COUNT(*) = 1` where the having appears as a
havingSpec to demarcate between these two cases. The filter gets pushed to the
postJoinCursor and we have a test to show that as well. The push does not
reflect in the native query though
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]