[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:
minghong
2022-11-23 14:14:20 +08:00
committed by GitHub
parent 7955e52b3e
commit fb385dcf23
4 changed files with 27 additions and 3 deletions

View File

@ -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) {

View File

@ -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)

View File

@ -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;
}
}

View File

@ -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();
}