From 24d3e0bf7530a971f8e2f9de477b902abf5a0b80 Mon Sep 17 00:00:00 2001 From: Socrates Date: Thu, 27 Nov 2025 10:39:34 +0800 Subject: [PATCH 1/2] Fix: Ensure HUDI tables are processed correctly by throwing an error for incorrect PhysicalFileScan usage --- .../nereids/glue/translator/PhysicalPlanTranslator.java | 7 +++++++ .../doris/nereids/trees/plans/logical/LogicalHudiScan.java | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java index fb36b0399470eb..0e452b04939ab0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java @@ -656,6 +656,13 @@ public PlanFragment visitPhysicalFileScan(PhysicalFileScan fileScan, PlanTransla fileScan.getTableSample().get().sampleValue, fileScan.getTableSample().get().seek)); } break; + case HUDI: + // HUDI table should be handled by visitPhysicalHudiScan, not here. + // If we reach here, it means LogicalHudiScan was incorrectly converted to + // PhysicalFileScan. + throw new RuntimeException("HUDI table should use PhysicalHudiScan instead of PhysicalFileScan. " + + "This indicates a bug in the optimizer rules. " + + "FileScan class: " + fileScan.getClass().getSimpleName()); default: throw new RuntimeException("do not support DLA type " + ((HMSExternalTable) table).getDlaType()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java index c4615c6ddd07a5..820d56ba722b46 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java @@ -178,6 +178,13 @@ public LogicalFileScan withOperativeSlots(Collection operativeSlots) { operativeSlots, virtualColumns, groupExpression, Optional.of(getLogicalProperties()), cachedOutputs); } + @Override + public LogicalFileScan withCachedOutput(List cachedOutputs) { + return new LogicalHudiScan(relationId, (ExternalTable) table, qualifier, + selectedPartitions, tableSample, tableSnapshot, scanParams, incrementalRelation, + operativeSlots, virtualColumns, groupExpression, Optional.of(getLogicalProperties()), cachedOutputs); + } + /** * Set scan params for incremental read * From abda678e82e752d9fdea2be8318ab3f4a0b580c3 Mon Sep 17 00:00:00 2001 From: Socrates Date: Fri, 9 Jan 2026 13:16:16 +0800 Subject: [PATCH 2/2] fix build --- .../doris/nereids/trees/plans/logical/LogicalHudiScan.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java index 820d56ba722b46..be9dc632de5806 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java @@ -182,7 +182,8 @@ public LogicalFileScan withOperativeSlots(Collection operativeSlots) { public LogicalFileScan withCachedOutput(List cachedOutputs) { return new LogicalHudiScan(relationId, (ExternalTable) table, qualifier, selectedPartitions, tableSample, tableSnapshot, scanParams, incrementalRelation, - operativeSlots, virtualColumns, groupExpression, Optional.of(getLogicalProperties()), cachedOutputs); + operativeSlots, virtualColumns, groupExpression, Optional.of(getLogicalProperties()), + Optional.of(cachedOutputs)); } /**