This is an automated email from the ASF dual-hosted git repository.
gian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 3de1272 bug fix: merge results of group by limit push down (#11969)
3de1272 is described below
commit 3de12729269e8446b994881bd507bc0d1422e98e
Author: mchades <[email protected]>
AuthorDate: Sat Mar 12 01:04:34 2022 +0800
bug fix: merge results of group by limit push down (#11969)
---
.../apache/druid/query/groupby/GroupByQuery.java | 6 +-
.../query/groupby/GroupByQueryRunnerTest.java | 70 ++++++++++++++++++++++
2 files changed, 75 insertions(+), 1 deletion(-)
diff --git
a/processing/src/main/java/org/apache/druid/query/groupby/GroupByQuery.java
b/processing/src/main/java/org/apache/druid/query/groupby/GroupByQuery.java
index f02d359..3f0b9a1 100644
--- a/processing/src/main/java/org/apache/druid/query/groupby/GroupByQuery.java
+++ b/processing/src/main/java/org/apache/druid/query/groupby/GroupByQuery.java
@@ -592,7 +592,11 @@ public class GroupByQuery extends BaseQuery<ResultRow>
needsReverseList.add(false);
final ColumnType type = dimensions.get(i).getOutputType();
dimensionTypes.add(type);
- comparators.add(StringComparators.LEXICOGRAPHIC);
+ if (type.isNumeric()) {
+ comparators.add(StringComparators.NUMERIC);
+ } else {
+ comparators.add(StringComparators.LEXICOGRAPHIC);
+ }
}
}
diff --git
a/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryRunnerTest.java
b/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryRunnerTest.java
index cf9490c..a48f2d9 100644
---
a/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryRunnerTest.java
+++
b/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryRunnerTest.java
@@ -11177,6 +11177,76 @@ public class GroupByQueryRunnerTest extends
InitializedNullHandlingTest
}
@Test
+ public void testMergeLimitPushDownResultsWithLongDimensionNotInLimitSpec()
+ {
+ // Cannot vectorize due to extraction dimension spec.
+ cannotVectorize();
+
+ if
(!config.getDefaultStrategy().equals(GroupByStrategySelector.STRATEGY_V2)) {
+ return;
+ }
+ GroupByQuery.Builder builder = makeQueryBuilder()
+ .setDataSource(QueryRunnerTestHelper.DATA_SOURCE)
+ .setInterval("2011-04-02/2011-04-04")
+ .setDimensions(new ExtractionDimensionSpec("quality",
"qualityLen", ColumnType.LONG, StrlenExtractionFn.instance()))
+ .setAggregatorSpecs(QueryRunnerTestHelper.ROWS_COUNT)
+ .setLimitSpec(
+ new DefaultLimitSpec(
+ Collections.emptyList(),
+ 20
+ )
+ )
+
.overrideContext(ImmutableMap.of(GroupByQueryConfig.CTX_KEY_FORCE_LIMIT_PUSH_DOWN,
true))
+ .setGranularity(Granularities.ALL);
+
+ final GroupByQuery allGranQuery = builder.build();
+
+ QueryRunner mergedRunner = factory.getToolchest().mergeResults(
+ (queryPlus, responseContext) -> {
+ // simulate two daily segments
+ final QueryPlus<ResultRow> queryPlus1 = queryPlus.withQuery(
+ queryPlus.getQuery().withQuerySegmentSpec(
+ new
MultipleIntervalSegmentSpec(Collections.singletonList(Intervals.of("2011-04-02/2011-04-03")))
+ )
+ );
+ final QueryPlus<ResultRow> queryPlus2 = queryPlus.withQuery(
+ queryPlus.getQuery().withQuerySegmentSpec(
+ new
MultipleIntervalSegmentSpec(Collections.singletonList(Intervals.of("2011-04-03/2011-04-04")))
+ )
+ );
+
+ return factory.getToolchest().mergeResults(
+ (queryPlus3, responseContext1) -> new MergeSequence<>(
+ queryPlus3.getQuery().getResultOrdering(),
+ Sequences.simple(
+ Arrays.asList(
+ runner.run(queryPlus1, responseContext1),
+ runner.run(queryPlus2, responseContext1)
+ )
+ )
+ )
+ ).run(queryPlus, responseContext);
+ }
+ );
+ Map<String, Object> context = new HashMap<>();
+ List<ResultRow> allGranExpectedResults = Arrays.asList(
+ makeRow(allGranQuery, "2011-04-02", "qualityLen", 4L, "rows", 2L),
+ makeRow(allGranQuery, "2011-04-02", "qualityLen", 6L, "rows", 4L),
+ makeRow(allGranQuery, "2011-04-02", "qualityLen", 7L, "rows", 6L),
+ makeRow(allGranQuery, "2011-04-02", "qualityLen", 8L, "rows", 2L),
+ makeRow(allGranQuery, "2011-04-02", "qualityLen", 9L, "rows", 6L),
+ makeRow(allGranQuery, "2011-04-02", "qualityLen", 10L, "rows", 4L),
+ makeRow(allGranQuery, "2011-04-02", "qualityLen", 13L, "rows", 2L)
+ );
+
+ TestHelper.assertExpectedObjects(
+ allGranExpectedResults,
+ mergedRunner.run(QueryPlus.wrap(allGranQuery)),
+ "merged"
+ );
+ }
+
+ @Test
public void testMergeResultsWithLimitPushDown()
{
if
(!config.getDefaultStrategy().equals(GroupByStrategySelector.STRATEGY_V2)) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]