APPROX_COUNT_DISTINCT_BUILTIN is broken in window expressions
- Dominant language
- Java
- Stars
- 14.1k
- Forks
- 3.8k
- Avg merge
- 2d 58m
- Merged PRs (30d)
- 233
Description
sqlTest file:
```
type: "operatorValidation"
sql: |
SELECT
APPROX_COUNT_DISTINCT_BUILTIN(dim2) OVER ()
FROM druid.numfoo
expectedResults:
- [null]
```
backtrace:
```
Caused by: org.apache.druid.java.util.common.RE: Failed to execute because of exception.
at org.apache.druid.sql.calcite.CalciteWindowQueryTest$TestCase.verifyResults(CalciteWindowQueryTest.java:126)
at org.apache.druid.sql.calcite.QueryVerification$QueryResultsVerifierFactory.lambda$make$0(QueryVerification.java:51)
... 44 more
Caused by: org.apache.druid.error.DruidException: Cannot coerce field [w0] from type [org.apache.druid.hll.VersionOneHyperLogLogCollector] to type [BIGINT]
at org.apache.druid.error.DruidException$DruidExceptionBuilder.build(DruidException.java:455)
at org.apache.druid.sql.calcite.run.SqlResults.cannotCoerce(SqlResults.java:248)
at org.apache.druid.sql.calcite.run.SqlResults.cannotCoerce(SqlResults.java:273)
at org.apache.druid.sql.calcite.run.SqlResults.coerce(SqlResults.java:121)
at org.apache.druid.sql.calcite.run.NativeQueryMaker.lambda$4(NativeQueryMaker.java:245)
at org.apache.druid.java.util.common.guava.MappingAccumulator.accumulate(MappingAccumulator.java:40)
at org.apache.druid.java.util.common.guava.MappingAccumulator.accumulate(MappingAccumulator.java:40)
at org.apache.druid.java.util.common.guava.BaseSequence.accumulate(BaseSequence.java:44)
at org.apache.druid.java.util.common.guava.ConcatSequence.lambda$0(ConcatSequence.java:42)
at org.apache.druid.java.util.common.guava.MappingAccumulator.accumulate(MappingAccumulator.java:40)
at org.apache.druid.query.operator.OperatorSequence$1.accumulate(OperatorSequence.java:60)
at org.apache.druid.query.operator.OperatorSequence$1.accumulate(OperatorSequence.java:1)
at org.apache.druid.query.operator.OperatorSequence$MyReceiver.push(OperatorSequence.java:146)
at org.apache.druid.query.operator.WindowProcessorOperator$1.push(WindowProcessorOperator.java:54)
at org.apache.druid.query.operator.NaivePartitioningOperator$1.push(NaivePartitioningOperator.java:126)
at org.apache.druid.query.operator.SequenceOperator.goOrContinue(SequenceOperator.java:65)
at org.apache.druid.query.operator.NaivePartitioningOperator.goOrContinue(NaivePartitioningOperator.java:106)
at org.apache.druid.query.operator.WindowProcessorOperator.goOrContinue(WindowProcessorOperator.java:47)
[...]
```
Contributor guide
Research direction
Start with the supplied sqlTest operatorValidation case and reproduce it through CalciteWindowQueryTest. Trace the result through WindowProcessorOperator and NativeQueryMaker, focusing on the VersionOneHyperLogLogCollector-to-BIGINT coercion shown in the backtrace. Done means the window expression returns the expected [null] result without the coercion failure.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, sql
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100