[opt](nereids) make fragment id in explain get inline with profile (#14421)
Nereids assign fragment ID in its own way. The fragment Id in explain is different from the fragment id in profile. This difference makes trouble to understand profile. This pr aims to print fragment id in explain the same as that in profile.·
This commit is contained in:
@ -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) {
|
||||
|
||||
@ -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<String> columnLabelList = physicalPlan.getOutput().stream().map(NamedExpression::getName)
|
||||
|
||||
@ -83,6 +83,12 @@ public class PlanFragment extends TreeNode<PlanFragment> {
|
||||
|
||||
// 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<PlanFragment> {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -235,6 +235,10 @@ public abstract class PlanNode extends TreeNode<PlanNode> 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<PlanNode> 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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user