diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java index a2724d6a627421..5352a128a3222c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java @@ -98,8 +98,8 @@ public String getNodeExplainString(String prefix, TExplainLevel detailLevel) { .append(getExplainString(conjuncts, prefix)).append("\n"); } if (!runtimeFilters.isEmpty()) { - output.append(prefix).append("runtime filters: "); - output.append(getRuntimeFilterExplainString(false)); + output.append(prefix).append("runtime filters:\n"); + output.append(getRuntimeFilterExplainString(false, prefix)); } output.append(prefix); diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/DataStreamSink.java b/fe/fe-core/src/main/java/org/apache/doris/planner/DataStreamSink.java index bdab085e725580..d3f7a3355827d3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/DataStreamSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/DataStreamSink.java @@ -157,7 +157,7 @@ public void setTabletSinkTxnId(long txnId) { @Override public String getExplainString(String prefix, TExplainLevel explainLevel) { StringBuilder strBuilder = new StringBuilder(); - strBuilder.append(prefix).append("stream data sink\n"); + strBuilder.append(prefix).append("STREAM_DATA_SINK\n"); strBuilder.append(prefix).append(" exchange id: ").append(exchNodeId); if (outputPartition != null) { strBuilder.append("\n").append(prefix).append(" ").append(outputPartition.getExplainString(explainLevel)); diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java index 7952fdd213fcc6..bd46eae60ba3f6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java @@ -857,8 +857,8 @@ public String getNodeExplainString(String detailPrefix, TExplainLevel detailLeve .append(getExplainString(conjuncts, detailPrefix)).append("\n"); } if (!runtimeFilters.isEmpty()) { - output.append(detailPrefix).append("runtime filters: "); - output.append(getRuntimeFilterExplainString(true)); + output.append(detailPrefix).append("runtime filters:\n"); + output.append(getRuntimeFilterExplainString(true, detailPrefix)); } output.append(detailPrefix).append(String.format("cardinality=%,d", cardinality)).append("\n"); if (outputTupleDesc != null) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/NestedLoopJoinNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/NestedLoopJoinNode.java index a6cf3e554eca72..b333e76786eb58 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/NestedLoopJoinNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/NestedLoopJoinNode.java @@ -259,7 +259,7 @@ public String getNodeExplainString(String detailPrefix, TExplainLevel detailLeve } if (!runtimeFilters.isEmpty()) { output.append(detailPrefix).append("runtime filters: "); - output.append(getRuntimeFilterExplainString(true)); + output.append(getRuntimeFilterExplainString(true, detailPrefix)); } output.append(detailPrefix).append("is output left side only: ").append(isOutputLeftSideOnly).append("\n"); output.append(detailPrefix).append(String.format("cardinality=%,d", cardinality)).append("\n"); diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java index 8e46a6e89d6e5d..2925ced8d9d1e7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java @@ -1374,8 +1374,8 @@ public String getNodeExplainString(String prefix, TExplainLevel detailLevel) { output.append(prefix).append("PREDICATES: ").append(expr.toSql()).append("\n"); } if (!runtimeFilters.isEmpty()) { - output.append(prefix).append("runtime filters: "); - output.append(getRuntimeFilterExplainString(false)); + output.append(prefix).append("runtime filters:\n"); + output.append(getRuntimeFilterExplainString(false, prefix)); } String selectedPartitions = getSelectedPartitionIds().stream().sorted() 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 0d6ee2d6178653..6610501424f691 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 @@ -1206,19 +1206,24 @@ public void clearRuntimeFilters() { runtimeFilters.clear(); } - protected String getRuntimeFilterExplainString(boolean isBuildNode, boolean isBrief) { + protected String getRuntimeFilterExplainString(boolean isBuildNode, boolean isBrief, String prefix) { if (runtimeFilters.isEmpty()) { return ""; } List filtersStr = new ArrayList<>(); for (RuntimeFilter filter : runtimeFilters) { - filtersStr.add(filter.getExplainString(isBuildNode, isBrief, getId())); + filtersStr.add(prefix + " " + filter.getExplainString(isBuildNode, isBrief, getId())); } - return Joiner.on(", ").join(filtersStr) + "\n"; + return Joiner.on("\n").join(filtersStr) + "\n"; } + protected String getRuntimeFilterExplainString(boolean isBuildNode, String prefix) { + return getRuntimeFilterExplainString(isBuildNode, false, prefix); + } + + // For test only protected String getRuntimeFilterExplainString(boolean isBuildNode) { - return getRuntimeFilterExplainString(isBuildNode, false); + return getRuntimeFilterExplainString(isBuildNode, false, ""); } /**