SQL: Bizarre error when computing min(string)
- Dominant language
- Java
- Stars
- 14.1k
- Forks
- 3.8k
- Avg merge
- 2d 31m
- Merged PRs (30d)
- 209
Description
Try: `select min('foo') from tbl`. The error looks like `Error while applying rule DruidQueryRule(AGGREGATE)` and has a trace:
```
Caused by: io.druid.java.util.common.ISE: Cannot create aggregator factory for type[STRING]
at io.druid.sql.calcite.aggregation.builtin.MinSqlAggregator.createMinAggregatorFactory(MinSqlAggregator.java:116) ~[druid-sql-0.12.3-iap6.jar:0.12.3-iap6]
at io.druid.sql.calcite.aggregation.builtin.MinSqlAggregator.toDruidAggregation(MinSqlAggregator.java:97) ~[druid-sql-0.12.3-iap6.jar:0.12.3-iap6]
at io.druid.sql.calcite.rule.GroupByRules.translateAggregateCall(GroupByRules.java:122) ~[druid-sql-0.12.3-iap6.jar:0.12.3-iap6]
at io.druid.sql.calcite.rel.DruidQuery.computeAggregations(DruidQuery.java:490) ~[druid-sql-0.12.3-iap6.jar:0.12.3-iap6]
at io.druid.sql.calcite.rel.DruidQuery.computeGrouping(DruidQuery.java:269) ~[druid-sql-0.12.3-iap6.jar:0.12.3-iap6]
at io.druid.sql.calcite.rel.DruidQuery.(DruidQuery.java:145) ~[druid-sql-0.12.3-iap6.jar:0.12.3-iap6]
at io.druid.sql.calcite.rel.PartialDruidQuery.build(PartialDruidQuery.java:285) ~[druid-sql-0.12.3-iap6.jar:0.12.3-iap6]
at io.druid.sql.calcite.rel.DruidQueryRel.toDruidQuery(DruidQueryRel.java:98) ~[druid-sql-0.12.3-iap6.jar:0.12.3-iap6]
at io.druid.sql.calcite.rel.DruidQueryRel.toDruidQueryForExplaining(DruidQueryRel.java:110) ~[druid-sql-0.12.3-iap6.jar:0.12.3-iap6]
at io.druid.sql.calcite.rel.DruidRel.isValidDruidQuery(DruidRel.java:70) ~[druid-sql-0.12.3-iap6.jar:0.12.3-iap6]
at io.druid.sql.calcite.rule.DruidRules$DruidQueryRule.onMatch(DruidRules.java:137) ~[druid-sql-0.12.3-iap6.jar:0.12.3-iap6]
at org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:212) ~[calcite-core-1.15.0.jar:1.15.0]
... 77 more
```
Contributor guide
Research direction
Reproduce `select min('foo') from tbl` and start at `io.druid.sql.calcite.aggregation.builtin.MinSqlAggregator.java`, especially `createMinAggregatorFactory` at line 116 and `toDruidAggregation`. Trace how `GroupByRules.translateAggregateCall` handles the aggregate, then establish the intended behavior for `min` on a string before defining completion.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, sql
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 38/100