diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeBuilder.java index beecbd6263..eb38be4a07 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeBuilder.java @@ -62,7 +62,7 @@ public class PlanTreeBuilder { } else { sb.append("[").append(sink.getClass().getSimpleName()).append("]"); } - sb.append("\n[Fragment: ").append(fragment.getId().asInt()).append("]"); + sb.append("\n[Fragment: ").append(fragment.getFragmentSequenceNum()).append("]"); sb.append("\n").append(sink.getExplainString("", TExplainLevel.BRIEF)); sinkNode = new PlanTreeNode(sink.getExchNodeId(), sb.toString()); if (i == 0) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java index 08157e5c62..34a088d799 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java @@ -104,7 +104,9 @@ public class NereidsPlanner extends Planner { scanNodeList = planTranslatorContext.getScanNodes(); descTable = planTranslatorContext.getDescTable(); fragments = new ArrayList<>(planTranslatorContext.getPlanFragments()); - + for (int seq = 0; seq < fragments.size(); seq++) { + fragments.get(seq).setFragmentSequenceNum(seq); + } // set output exprs logicalPlanAdapter.setResultExprs(root.getOutputExprs()); ArrayList columnLabelList = physicalPlan.getOutput().stream().map(NamedExpression::getName) diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanFragment.java b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanFragment.java index e3fb413d1a..7cc059ed47 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanFragment.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanFragment.java @@ -83,6 +83,12 @@ public class PlanFragment extends TreeNode { // id for this plan fragment private PlanFragmentId fragmentId; + // nereids planner and original planner generate fragments in different order. + // This makes nereids fragment id different from that of original planner, and + // hence different from that in profile. + // in original planner, fragmentSequenceNum is fragmentId, and in nereids planner, + // fragmentSequenceNum is the id displayed in profile + private int fragmentSequenceNum; // private PlanId planId_; // private CohortId cohortId_; @@ -414,4 +420,16 @@ public class PlanFragment extends TreeNode { public boolean isTransferQueryStatisticsWithEveryBatch() { return transferQueryStatisticsWithEveryBatch; } + + public int getFragmentSequenceNum() { + if (ConnectContext.get().getSessionVariable().isEnableNereidsPlanner()) { + return fragmentSequenceNum; + } else { + return fragmentId.asInt(); + } + } + + public void setFragmentSequenceNum(int seq) { + fragmentSequenceNum = seq; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java index 9df9370245..12de135994 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java @@ -235,6 +235,10 @@ public abstract class PlanNode extends TreeNode implements PlanStats { return fragment.getFragmentId(); } + public int getFragmentSeqenceNum() { + return fragment.getFragmentSequenceNum(); + } + public void setFragmentId(PlanFragmentId id) { fragmentId = id; } @@ -887,7 +891,7 @@ public abstract class PlanNode extends TreeNode implements PlanStats { public String getPlanTreeExplainStr() { StringBuilder sb = new StringBuilder(); sb.append("[").append(getId().asInt()).append(": ").append(getPlanNodeName()).append("]"); - sb.append("\n[Fragment: ").append(getFragmentId().asInt()).append("]"); + sb.append("\n[Fragment: ").append(getFragmentSeqenceNum()).append("]"); sb.append("\n").append(getNodeExplainString("", TExplainLevel.BRIEF)); return sb.toString(); }