Skip to content

[Bug](nereids) Get Duplicate key exception in INFER_PREDICATES rule #38905

@liutang123

Description

@liutang123

Search before asking

  • I had searched in the issues and found no similar issues.

Version

2.0

What's Wrong?

CREATE TABLE `test_t` (
`key` varchar(*) NOT NULL,
  `value` varchar(*) NULL
  
) ENGINE=OLAP
DISTRIBUTED BY HASH(`key`) BUCKETS 2
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);


SET enable_fallback_to_original_planner=false;

-- explain ANALYZED PLAN
SELECT
       t.*
FROM (
        SELECT a , b 
        FROM (
                SELECT any_value(value) AS a,
                       any_value(CAST(value AS double)) AS b
                FROM (
                        SELECT CAST(value AS double) AS value
                        FROM test_t
                ) rbsj
        ) RB
) t
join
( SELECT 124 AS somekey) t2

The error :

ERROR 1105 (HY000): errCode = 2, detailMessage = Unexpected exception: Duplicate key a#3

The exception in fe log:

org.apache.doris.common.AnalysisException: errCode = 2, detailMessage = Unexpected exception: Duplicate key a#3
        at org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:620) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:485) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:475) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:435) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.ConnectProcessor.dispatch(ConnectProcessor.java:587) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.ConnectProcessor.processOnce(ConnectProcessor.java:856) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.mysql.ReadListener.lambda$handleEvent$0(ReadListener.java:52) ~[doris-fe.jar:1.2-SNAPSHOT]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_272]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_272]
        at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_272]
Caused by: java.lang.IllegalStateException: Duplicate key a#3
        at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133) ~[?:1.8.0_272]
        at java.util.HashMap.merge(HashMap.java:1254) ~[?:1.8.0_272]
        at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320) ~[?:1.8.0_272]
        at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) ~[?:1.8.0_272]
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[?:1.8.0_272]
        at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[?:1.8.0_272]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) ~[?:1.8.0_272]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[?:1.8.0_272]
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[?:1.8.0_272]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_272]
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566) ~[?:1.8.0_272]
        at org.apache.doris.nereids.rules.rewrite.PullUpPredicates.lambda$visitLogicalAggregate$7(PullUpPredicates.java:105) ~[doris-f
e.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.rules.rewrite.PullUpPredicates.cacheOrElse(PullUpPredicates.java:126) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.rules.rewrite.PullUpPredicates.visitLogicalAggregate(PullUpPredicates.java:99) ~[doris-fe.jar:1.2-
SNAPSHOT]
        at org.apache.doris.nereids.rules.rewrite.PullUpPredicates.visitLogicalAggregate(PullUpPredicates.java:48) ~[doris-fe.jar:1.2-
SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.logical.LogicalAggregate.accept(LogicalAggregate.java:170) ~[doris-fe.jar:1.2-SNAPSHOT
]
        at org.apache.doris.nereids.rules.rewrite.PullUpPredicates.lambda$visitLogicalProject$5(PullUpPredicates.java:84) ~[doris-fe.j
ar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.rules.rewrite.PullUpPredicates.cacheOrElse(PullUpPredicates.java:126) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.rules.rewrite.PullUpPredicates.visitLogicalProject(PullUpPredicates.java:83) ~[doris-fe.jar:1.2-SN
APSHOT]
        at org.apache.doris.nereids.rules.rewrite.PullUpPredicates.visitLogicalProject(PullUpPredicates.java:48) ~[doris-fe.jar:1.2-SN
APSHOT]
        at org.apache.doris.nereids.trees.plans.logical.LogicalProject.accept(LogicalProject.java:134) ~[doris-fe.jar:1.2-SNAPSHOT]
at org.apache.doris.nereids.rules.rewrite.InferPredicates.pullUpPredicates(InferPredicates.java:119) ~[doris-fe.jar:1.2-SNAPSH
OT]
        at org.apache.doris.nereids.rules.rewrite.InferPredicates.getAllExpressions(InferPredicates.java:111) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.rules.rewrite.InferPredicates.visitLogicalJoin(InferPredicates.java:70) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.rules.rewrite.InferPredicates.visitLogicalJoin(InferPredicates.java:54) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.logical.LogicalJoin.accept(LogicalJoin.java:263) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.visitor.DefaultPlanRewriter.visitChildren(DefaultPlanRewriter.java:54) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.visitor.DefaultPlanRewriter.visit(DefaultPlanRewriter.java:35) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.visitor.DefaultPlanRewriter.visit(DefaultPlanRewriter.java:31) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.visitor.PlanVisitor.visitLogicalProject(PlanVisitor.java:191) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.logical.LogicalProject.accept(LogicalProject.java:134) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.visitor.DefaultPlanRewriter.visitChildren(DefaultPlanRewriter.java:54) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.visitor.DefaultPlanRewriter.visit(DefaultPlanRewriter.java:35) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.visitor.DefaultPlanRewriter.visit(DefaultPlanRewriter.java:31) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.visitor.PlanVisitor.visitLogicalSink(PlanVisitor.java:118) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.visitor.SinkVisitor.visitLogicalResultSink(SinkVisitor.java:78) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.logical.LogicalResultSink.accept(LogicalResultSink.java:58) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.rules.rewrite.InferPredicates.rewriteRoot(InferPredicates.java:59) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.jobs.rewrite.CustomRewriteJob.execute(CustomRewriteJob.java:59) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.jobs.executor.AbstractBatchJobExecutor.execute(AbstractBatchJobExecutor.java:119) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.rules.rewrite.RewriteCteChildren.visit(RewriteCteChildren.java:73) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.rules.rewrite.RewriteCteChildren.visit(RewriteCteChildren.java:57) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.visitor.PlanVisitor.visitLogicalSink(PlanVisitor.java:118) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.visitor.SinkVisitor.visitLogicalResultSink(SinkVisitor.java:78) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.trees.plans.logical.LogicalResultSink.accept(LogicalResultSink.java:58) ~[doris-fe.jar:1.2-SNAPSHOT]
at org.apache.doris.nereids.rules.rewrite.RewriteCteChildren.rewriteRoot(RewriteCteChildren.java:68) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.jobs.rewrite.CustomRewriteJob.execute(CustomRewriteJob.java:59) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.jobs.executor.AbstractBatchJobExecutor.execute(AbstractBatchJobExecutor.java:119) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.NereidsPlanner.rewrite(NereidsPlanner.java:304) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.NereidsPlanner.plan(NereidsPlanner.java:234) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.nereids.NereidsPlanner.plan(NereidsPlanner.java:126) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:616) ~[doris-fe.jar:1.2-SNAPSHOT]
        ... 9 more

The reason is any_value(value) AS a and any_value(CAST(value AS double)) AS b will produce two Alias with the same expression.

What You Expected?

No exception

How to Reproduce?

No response

Anything Else?

No response

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions