apache / druid

Apache Druid: a high performance real-time analytics database.
https://druid.apache.org/
Apache License 2.0
13.29k stars 3.66k forks source link

APPROX_COUNT_DISTINCT_BUILTIN is broken in window expressions #15666

Open kgyrtkirk opened 5 months ago

kgyrtkirk commented 5 months ago

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)
[...]
AlbericByte commented 3 weeks ago

@kgyrtkirk and @asdf2014 i have verified this issue(bigint type) in latest version, which work as expected. the result is null. If still have this issue, could you provide more information.

Screenshot 2024-06-09 at 4 25 22 PM