apache / apache/druid

SQL: Bizarre error when computing min(string)

Open
#6,433 4 comments 0 reactions 0 assignees View on GitHub
Area - SQL Ease of Use stale
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.