You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/06/14 07:34:21 UTC

[incubator-doris] branch master updated: [fix] fix bug that show proc "/cluster_balance/history_tablets" return malformat error (#10073)

This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 81e0a348a7 [fix] fix bug that show proc "/cluster_balance/history_tablets" return malformat error (#10073)
81e0a348a7 is described below

commit 81e0a348a749b37f46098badca1eddbc9528cb8d
Author: Mingyu Chen <mo...@gmail.com>
AuthorDate: Tue Jun 14 15:34:16 2022 +0800

    [fix] fix bug that show proc "/cluster_balance/history_tablets" return malformat error (#10073)
---
 .../common/proc/TabletSchedulerDetailProcDir.java  | 11 ++--
 .../org/apache/doris/planner/HashJoinNode.java     | 22 ++++----
 .../org/apache/doris/planner/OlapScanNode.java     | 58 +++++++---------------
 .../org/apache/doris/planner/PlanFragment.java     |  5 +-
 .../org/apache/doris/planner/ColocatePlanTest.java |  2 +-
 .../doris/planner/DistributedPlannerTest.java      |  8 +--
 .../planner/MaterializedViewFunctionTest.java      | 18 +++----
 .../org/apache/doris/planner/QueryPlanTest.java    | 30 +++++------
 .../apache/doris/planner/ResourceTagQueryTest.java |  6 +--
 .../doris/planner/TableFunctionPlanTest.java       |  2 +-
 .../java/org/apache/doris/policy/PolicyTest.java   | 20 ++------
 .../data/performance/redundant_conjuncts.out       | 28 +++--------
 .../suites/rollup/test_materialized_view.groovy    |  2 +-
 .../suites/rollup/test_rollup_agg.groovy           |  2 +-
 14 files changed, 85 insertions(+), 129 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/proc/TabletSchedulerDetailProcDir.java b/fe/fe-core/src/main/java/org/apache/doris/common/proc/TabletSchedulerDetailProcDir.java
index 6777c3ede9..40695c8b62 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/proc/TabletSchedulerDetailProcDir.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/proc/TabletSchedulerDetailProcDir.java
@@ -34,12 +34,11 @@ import java.util.List;
  * show proc "/tablet_scheduler/history_tablets";
  */
 public class TabletSchedulerDetailProcDir implements ProcDirInterface {
-    public static final ImmutableList<String> TITLE_NAMES = new ImmutableList.Builder<String>()
-            .add("TabletId").add("Type").add("Medium").add("Status").add("State").add("OrigPrio").add("DynmPrio")
-            .add("SrcBe").add("SrcPath").add("DestBe").add("DestPath").add("Timeout")
-            .add("Create").add("LstSched").add("LstVisit").add("Finished").add("Rate").add("FailedSched")
-            .add("FailedRunning").add("LstAdjPrio").add("VisibleVer").add("VisibleVerHash")
-            .add("CmtVer").add("CmtVerHash").add("ErrMsg")
+    public static final ImmutableList<String> TITLE_NAMES = new ImmutableList.Builder<String>().add("TabletId")
+            .add("Type").add("Medium").add("Status").add("State").add("OrigPrio").add("DynmPrio").add("SrcBe")
+            .add("SrcPath").add("DestBe").add("DestPath").add("Timeout").add("Create").add("LstSched").add("LstVisit")
+            .add("Finished").add("Rate").add("FailedSched").add("FailedRunning").add("LstAdjPrio").add("VisibleVer")
+            .add("CmtVer").add("ErrMsg")
             .build();
 
     private String type;
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 f474e9efd6..706a127c0a 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
@@ -693,23 +693,26 @@ public class HashJoinNode extends PlanNode {
 
     @Override
     public String getNodeExplainString(String detailPrefix, TExplainLevel detailLevel) {
-        String distrModeStr =
-                (distrMode != DistributionMode.NONE) ? (" (" + distrMode.toString() + ")") : "";
-        StringBuilder output = new StringBuilder()
-                .append(detailPrefix).append("join op: ").append(joinOp.toString()).append(distrModeStr).append("\n");
+        String distrModeStr = "";
+        if (isColocate) {
+            distrModeStr = "COLOCATE[" + colocateReason + "]";
+        } else {
+            distrModeStr = distrMode.toString();
+        }
+        StringBuilder output =
+                new StringBuilder().append(detailPrefix).append("join op: ").append(joinOp.toString()).append("(")
+                        .append(distrModeStr).append(")").append("[").append(colocateReason).append("]\n");
 
         if (detailLevel == TExplainLevel.BRIEF) {
             return output.toString();
         }
 
-        output.append(detailPrefix).append("hash predicates:\n")
-                .append(detailPrefix).append("colocate: ").append(isColocate).append(isColocate ? "" : ", reason: " + colocateReason).append("\n");
-
         for (BinaryPredicate eqJoinPredicate : eqJoinConjuncts) {
             output.append(detailPrefix).append("equal join conjunct: ").append(eqJoinPredicate.toSql()).append("\n");
         }
         if (!otherJoinConjuncts.isEmpty()) {
-            output.append(detailPrefix).append("other join predicates: ").append(getExplainString(otherJoinConjuncts)).append("\n");
+            output.append(detailPrefix).append("other join predicates: ").append(getExplainString(otherJoinConjuncts))
+                    .append("\n");
         }
         if (!conjuncts.isEmpty()) {
             output.append(detailPrefix).append("other predicates: ").append(getExplainString(conjuncts)).append("\n");
@@ -718,8 +721,7 @@ public class HashJoinNode extends PlanNode {
             output.append(detailPrefix).append("runtime filters: ");
             output.append(getRuntimeFilterExplainString(true));
         }
-        output.append(detailPrefix).append(String.format(
-                "cardinality=%s", cardinality)).append("\n");
+        output.append(detailPrefix).append(String.format("cardinality=%s", cardinality)).append("\n");
         // todo unify in plan node
         if (outputSlotIds != null) {
             output.append(detailPrefix).append("output slot ids: ");
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 fff10e95ad..e2e6ec0d41 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
@@ -688,63 +688,43 @@ public class OlapScanNode extends ScanNode {
     public String getNodeExplainString(String prefix, TExplainLevel detailLevel) {
         StringBuilder output = new StringBuilder();
 
-        output.append(prefix).append("TABLE: ").append(olapTable.getName()).append("\n");
-
+        String indexName = olapTable.getIndexNameById(selectedIndexId);
+        output.append(prefix).append("TABLE: ").append(olapTable.getName()).append("(").append(indexName).append(")");
         if (detailLevel == TExplainLevel.BRIEF) {
             return output.toString();
         }
+        if (isPreAggregation) {
+            output.append(", PREAGGREGATION: ON");
+        } else {
+            output.append(", PREAGGREGATION: OFF. Reason: ").append(reasonOfPreAggregation);
+        }
+        output.append("\n");
 
         if (null != sortColumn) {
             output.append(prefix).append("SORT COLUMN: ").append(sortColumn).append("\n");
         }
-        if (isPreAggregation) {
-            output.append(prefix).append("PREAGGREGATION: ON").append("\n");
-        } else {
-            output.append(prefix).append("PREAGGREGATION: OFF. Reason: ").append(reasonOfPreAggregation).append("\n");
-        }
+
         if (!conjuncts.isEmpty()) {
-            output.append(prefix).append("PREDICATES: ").append(
-                    getExplainString(conjuncts)).append("\n");
+            output.append(prefix).append("PREDICATES: ").append(getExplainString(conjuncts)).append("\n");
         }
         if (!runtimeFilters.isEmpty()) {
             output.append(prefix).append("runtime filters: ");
             output.append(getRuntimeFilterExplainString(false));
         }
 
-        output.append(prefix).append(String.format(
-                "partitions=%s/%s",
-                selectedPartitionNum,
-                olapTable.getPartitions().size()));
-
-        String indexName = olapTable.getIndexNameById(selectedIndexId);
-        output.append("\n").append(prefix).append(String.format("rollup: %s", indexName));
-
-        output.append("\n");
-
-        output.append(prefix).append(String.format(
-                "tabletRatio=%s/%s", selectedTabletsNum, totalTabletsNum));
-        output.append("\n");
-
-        // We print up to 10 tablet, and we print "..." if the number is more than 10
-        if (scanTabletIds.size() > 10) {
-            List<Long> firstTenTabletIds = scanTabletIds.subList(0, 10);
-            output.append(prefix).append(String.format("tabletList=%s ...", Joiner.on(",").join(firstTenTabletIds)));
+        output.append(prefix).append(String.format("partitions=%s/%s, tablets=%s/%s", selectedPartitionNum,
+                olapTable.getPartitions().size(), selectedTabletsNum, totalTabletsNum));
+        // We print up to 3 tablet, and we print "..." if the number is more than 3
+        if (scanTabletIds.size() > 3) {
+            List<Long> firstTenTabletIds = scanTabletIds.subList(0, 3);
+            output.append(String.format(", tabletList=%s ...", Joiner.on(",").join(firstTenTabletIds)));
         } else {
-            output.append(prefix).append(String.format("tabletList=%s", Joiner.on(",").join(scanTabletIds)));
+            output.append(String.format(", tabletList=%s", Joiner.on(",").join(scanTabletIds)));
         }
-
-        output.append("\n");
-
-        output.append(prefix).append(String.format(
-                "cardinality=%s", cardinality));
-        output.append("\n");
-
-        output.append(prefix).append(String.format(
-                "avgRowSize=%s", avgRowSize));
         output.append("\n");
 
-        output.append(prefix).append(String.format(
-                "numNodes=%s", numNodes));
+        output.append(prefix).append(String.format("cardinality=%s", cardinality))
+                .append(String.format(", avgRowSize=%s", avgRowSize)).append(String.format(", numNodes=%s", numNodes));
         output.append("\n");
 
         return output.toString();
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 eea0afde9d..1ecc3342f3 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
@@ -293,10 +293,9 @@ public class PlanFragment extends TreeNode<PlanFragment> {
     public String getExplainString(TExplainLevel explainLevel) {
         StringBuilder str = new StringBuilder();
         Preconditions.checkState(dataPartition != null);
-        str.append(" OUTPUT EXPRS:");
         if (CollectionUtils.isNotEmpty(outputExprs)) {
-            str.append(outputExprs.stream().map(Expr::toSql)
-                    .collect(Collectors.joining(" | ")));
+            str.append("  OUTPUT EXPRS:");
+            str.append(outputExprs.stream().map(Expr::toSql).collect(Collectors.joining(" | ")));
         }
         str.append("\n");
         str.append("  PARTITION: " + dataPartition.getExplainString(explainLevel) + "\n");
diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/ColocatePlanTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/ColocatePlanTest.java
index a27387f478..234a650ced 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/ColocatePlanTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/ColocatePlanTest.java
@@ -39,7 +39,7 @@ import java.util.List;
 import java.util.UUID;
 
 public class ColocatePlanTest {
-    private static final String COLOCATE_ENABLE = "colocate: true";
+    public static final String COLOCATE_ENABLE = "COLOCATE";
     private static String runningDir = "fe/mocked/DemoTest/" + UUID.randomUUID().toString() + "/";
     private static ConnectContext ctx;
 
diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/DistributedPlannerTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/DistributedPlannerTest.java
index 56bc5ad554..c8331573e5 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/DistributedPlannerTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/DistributedPlannerTest.java
@@ -135,7 +135,7 @@ public class DistributedPlannerTest {
         Planner planner = stmtExecutor.planner();
         List<PlanFragment> fragments = planner.getFragments();
         String plan = planner.getExplainString(fragments, new ExplainOptions(false, false));
-        Assert.assertEquals(1, StringUtils.countMatches(plan, "INNER JOIN (BROADCAST)"));
+        Assert.assertEquals(1, StringUtils.countMatches(plan, "INNER JOIN(BROADCAST)"));
 
         sql = "explain select * from db1.tbl1 join [SHUFFLE] db1.tbl2 on tbl1.k1 = tbl2.k3";
         stmtExecutor = new StmtExecutor(ctx, sql);
@@ -143,7 +143,7 @@ public class DistributedPlannerTest {
         planner = stmtExecutor.planner();
         fragments = planner.getFragments();
         plan = planner.getExplainString(fragments, new ExplainOptions(false, false));
-        Assert.assertEquals(1, StringUtils.countMatches(plan, "INNER JOIN (PARTITIONED)"));
+        Assert.assertEquals(1, StringUtils.countMatches(plan, "INNER JOIN(PARTITIONED)"));
     }
 
     @Test
@@ -154,7 +154,7 @@ public class DistributedPlannerTest {
         Planner planner = stmtExecutor.planner();
         List<PlanFragment> fragments = planner.getFragments();
         String plan = planner.getExplainString(fragments, new ExplainOptions(false, false));
-        Assert.assertEquals(1, StringUtils.countMatches(plan, "INNER JOIN (BROADCAST)"));
+        Assert.assertEquals(1, StringUtils.countMatches(plan, "INNER JOIN(BROADCAST)"));
 
         double originThreshold = ctx.getSessionVariable().autoBroadcastJoinThreshold;
         try {
@@ -164,7 +164,7 @@ public class DistributedPlannerTest {
             planner = stmtExecutor.planner();
             fragments = planner.getFragments();
             plan = planner.getExplainString(fragments, new ExplainOptions(false, false));
-            Assert.assertEquals(1, StringUtils.countMatches(plan, "INNER JOIN (PARTITIONED)"));
+            Assert.assertEquals(1, StringUtils.countMatches(plan, "INNER JOIN(PARTITIONED)"));
         } finally {
             ctx.getSessionVariable().autoBroadcastJoinThreshold = originThreshold;
         }
diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java
index 7f920023bd..49f64d6e02 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java
@@ -34,21 +34,21 @@ import java.util.UUID;
 
 public class MaterializedViewFunctionTest {
     private static String baseDir = "fe";
-    private static String runningDir = baseDir + "/mocked/MaterializedViewFunctionTest/"
-            + UUID.randomUUID().toString() + "/";
+    private static String runningDir =
+            baseDir + "/mocked/MaterializedViewFunctionTest/" + UUID.randomUUID().toString() + "/";
     private static final String EMPS_TABLE_NAME = "emps";
     private static final String EMPS_MV_NAME = "emps_mv";
     private static final String HR_DB_NAME = "db1";
-    private static final String QUERY_USE_EMPS_MV = "rollup: " + EMPS_MV_NAME;
-    private static final String QUERY_USE_EMPS = "rollup: " + EMPS_TABLE_NAME;
+    private static final String QUERY_USE_EMPS_MV = "(" + EMPS_MV_NAME + ")";
+    private static final String QUERY_USE_EMPS = "(" + EMPS_TABLE_NAME + ")";
     private static final String DEPTS_TABLE_NAME = "depts";
     private static final String DEPTS_MV_NAME = "depts_mv";
-    private static final String QUERY_USE_DEPTS_MV = "rollup: " + DEPTS_MV_NAME;
-    private static final String QUERY_USE_DEPTS = "rollup: " + DEPTS_TABLE_NAME;
+    private static final String QUERY_USE_DEPTS_MV = "(" + DEPTS_MV_NAME + ")";
+    private static final String QUERY_USE_DEPTS = "(" + DEPTS_TABLE_NAME + ")";
     private static final String USER_TAG_TABLE_NAME = "user_tags";
     private static final String USER_TAG_MV_NAME = "user_tags_mv";
-    private static final String QUERY_USE_USER_TAG_MV = "rollup: " + USER_TAG_MV_NAME;
-    private static final String QUERY_USE_USER_TAG = "rollup: " + USER_TAG_TABLE_NAME;
+    private static final String QUERY_USE_USER_TAG_MV = "(" + USER_TAG_MV_NAME + ")";
+    private static final String QUERY_USE_USER_TAG = "(" + USER_TAG_TABLE_NAME + ")";
     private static final String TEST_TABLE_NAME = "test_tb";
     private static DorisAssert dorisAssert;
 
@@ -556,7 +556,7 @@ public class MaterializedViewFunctionTest {
                 + "(select deptno, sum(salary) from " + EMPS_TABLE_NAME + " where deptno >200 group by deptno) B "
                 + "using (deptno);";
         dorisAssert.withMaterializedView(createEmpsMVSql01).withMaterializedView(createEmpsMVSql02).query(query)
-                .explainContains("rollup: emp_mv_01", "rollup: emp_mv_02");
+                .explainContains("(emp_mv_01)", "(emp_mv_02)");
     }
 
     @Test
diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
index ffbac35ec5..f580cb654a 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
@@ -1039,20 +1039,20 @@ public class QueryPlanTest extends TestWithFeService {
 
         String queryStr = "explain select * from test.colocate1 t1, test.colocate2 t2 where t1.k1 = t2.k1 and t1.k2 = t2.k2 and t1.k3 = t2.k3";
         String explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("colocate: true"));
+        Assert.assertTrue(explainString.contains(ColocatePlanTest.COLOCATE_ENABLE));
 
         queryStr = "explain select * from test.colocate1 t1 join [shuffle] test.colocate2 t2 on t1.k1 = t2.k1 and t1.k2 = t2.k2";
         explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("colocate: false"));
+        Assert.assertFalse(explainString.contains(ColocatePlanTest.COLOCATE_ENABLE));
 
         // t1.k1 = t2.k2 not same order with distribute column
         queryStr = "explain select * from test.colocate1 t1, test.colocate2 t2 where t1.k1 = t2.k2 and t1.k2 = t2.k1 and t1.k3 = t2.k3";
         explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("colocate: false"));
+        Assert.assertFalse(explainString.contains(ColocatePlanTest.COLOCATE_ENABLE));
 
         queryStr = "explain select * from test.colocate1 t1, test.colocate2 t2 where t1.k2 = t2.k2";
         explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("colocate: false"));
+        Assert.assertFalse(explainString.contains(ColocatePlanTest.COLOCATE_ENABLE));
     }
 
     @Test
@@ -1062,12 +1062,12 @@ public class QueryPlanTest extends TestWithFeService {
         // single partition
         String queryStr = "explain select * from test.jointest t1, test.jointest t2 where t1.k1 = t2.k1";
         String explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("colocate: true"));
+        Assert.assertTrue(explainString.contains(ColocatePlanTest.COLOCATE_ENABLE));
 
         // multi partition, should not be colocate
         queryStr = "explain select * from test.dynamic_partition t1, test.dynamic_partition t2 where t1.k1 = t2.k1";
         explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("colocate: false"));
+        Assert.assertFalse(explainString.contains(ColocatePlanTest.COLOCATE_ENABLE));
     }
 
     @Test
@@ -1184,17 +1184,17 @@ public class QueryPlanTest extends TestWithFeService {
 
         String queryStr = "explain select * from mysql_table t2, jointest t1 where t1.k1 = t2.k1";
         String explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("INNER JOIN (BROADCAST)"));
+        Assert.assertTrue(explainString.contains("INNER JOIN(BROADCAST)"));
         Assert.assertTrue(UtFrameUtils.checkPlanResultContainsNode(explainString, 1, "SCAN MYSQL"));
 
         queryStr = "explain select * from jointest t1, mysql_table t2 where t1.k1 = t2.k1";
         explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("INNER JOIN (BROADCAST)"));
+        Assert.assertTrue(explainString.contains("INNER JOIN(BROADCAST)"));
         Assert.assertTrue(UtFrameUtils.checkPlanResultContainsNode(explainString, 1, "SCAN MYSQL"));
 
         queryStr = "explain select * from jointest t1, mysql_table t2, mysql_table t3 where t1.k1 = t3.k1";
         explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertFalse(explainString.contains("INNER JOIN (PARTITIONED)"));
+        Assert.assertFalse(explainString.contains("INNER JOIN(PARTITIONED)"));
 
         // should clear the jointest table to make sure do not affect other test
         for (Partition partition : tbl.getPartitions()) {
@@ -1231,17 +1231,17 @@ public class QueryPlanTest extends TestWithFeService {
 
         String queryStr = "explain select * from odbc_mysql t2, jointest t1 where t1.k1 = t2.k1";
         String explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("INNER JOIN (BROADCAST)"));
+        Assert.assertTrue(explainString.contains("INNER JOIN(BROADCAST)"));
         Assert.assertTrue(UtFrameUtils.checkPlanResultContainsNode(explainString, 1, "SCAN ODBC"));
 
         queryStr = "explain select * from jointest t1, odbc_mysql t2 where t1.k1 = t2.k1";
         explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("INNER JOIN (BROADCAST)"));
+        Assert.assertTrue(explainString.contains("INNER JOIN(BROADCAST)"));
         Assert.assertTrue(UtFrameUtils.checkPlanResultContainsNode(explainString, 1, "SCAN ODBC"));
 
         queryStr = "explain select * from jointest t1, odbc_mysql t2, odbc_mysql t3 where t1.k1 = t3.k1";
         explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertFalse(explainString.contains("INNER JOIN (PARTITIONED)"));
+        Assert.assertFalse(explainString.contains("INNER JOIN(PARTITIONED)"));
 
         // should clear the jointest table to make sure do not affect other test
         for (Partition partition : tbl.getPartitions()) {
@@ -1327,15 +1327,15 @@ public class QueryPlanTest extends TestWithFeService {
 
         // default set PreferBroadcastJoin true
         String explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("INNER JOIN (BROADCAST)"));
+        Assert.assertTrue(explainString.contains("INNER JOIN(BROADCAST)"));
 
         connectContext.getSessionVariable().setPreferJoinMethod("shuffle");
         explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("INNER JOIN (PARTITIONED)"));
+        Assert.assertTrue(explainString.contains("INNER JOIN(PARTITIONED)"));
 
         connectContext.getSessionVariable().setPreferJoinMethod("broadcast");
         explainString = getSQLPlanOrErrorMsg(queryStr);
-        Assert.assertTrue(explainString.contains("INNER JOIN (BROADCAST)"));
+        Assert.assertTrue(explainString.contains("INNER JOIN(BROADCAST)"));
     }
 
     @Test
diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/ResourceTagQueryTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/ResourceTagQueryTest.java
index 0a87605347..d202919e5b 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/ResourceTagQueryTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/ResourceTagQueryTest.java
@@ -208,7 +208,7 @@ public class ResourceTagQueryTest {
         String queryStr = "explain select * from test.tbl1";
         String explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, queryStr);
         System.out.println(explainString);
-        Assert.assertTrue(explainString.contains("tabletRatio=30/30"));
+        Assert.assertTrue(explainString.contains("tablets=30/30"));
 
         // set zone1 tag for root
         String setPropStr2 = "set property for 'root' 'resource_tags.location' = 'zone1';";
@@ -246,7 +246,7 @@ public class ResourceTagQueryTest {
         queryStr = "explain select * from test.tbl1";
         explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, queryStr);
         System.out.println(explainString);
-        Assert.assertTrue(explainString.contains("tabletRatio=30/30"));
+        Assert.assertTrue(explainString.contains("tablets=30/30"));
 
         // for now, 3 backends with tag zone1, 2 with tag default, so table is not stable.
         ExceptionChecker.expectThrows(UserException.class, () -> tbl.checkReplicaAllocation());
@@ -269,7 +269,7 @@ public class ResourceTagQueryTest {
         queryStr = "explain select * from test.tbl1";
         explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, queryStr);
         System.out.println(explainString);
-        Assert.assertTrue(explainString.contains("tabletRatio=30/30"));
+        Assert.assertTrue(explainString.contains("tablets=30/30"));
 
         // set user exec mem limit
         String setExecMemLimitStr = "set property for 'root' 'exec_mem_limit' = '1000000';";
diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java
index 82736b912e..ce14f2b2ac 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java
@@ -508,7 +508,7 @@ public class TableFunctionPlanTest {
     public void testLateralViewWithWhere() throws Exception {
         String sql = "select k1,e1 from db1.table_for_view lateral view explode_split(k3,',') tmp as e1 where k1 in (select k2 from db1.table_for_view);";
         String explainString = UtFrameUtils.getSQLPlanOrErrorMsg(ctx, sql, true);
-        Assert.assertTrue(explainString.contains("join op: LEFT SEMI JOIN (BROADCAST)"));
+        Assert.assertTrue(explainString.contains("join op: LEFT SEMI JOIN(BROADCAST)"));
         Assert.assertTrue(explainString.contains("equal join conjunct: `k1` = `k2`"));
         Assert.assertTrue(!explainString.contains("equal join conjunct: `k2` = `k2`"));
     }
diff --git a/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java b/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java
index 5a9c0b905e..3b162804df 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java
@@ -183,25 +183,13 @@ public class PolicyTest extends TestWithFeService {
         createPolicy("CREATE ROW POLICY test_row_policy2 ON test.table1 AS RESTRICTIVE TO test_policy USING (k2 = 1)");
         String joinSql = "select * from table1 join table2 on table1.k1=table2.k1";
         System.out.println(getSQLPlanOrErrorMsg(joinSql));
-        Assertions.assertTrue(getSQLPlanOrErrorMsg(joinSql).contains(
-                        "     TABLE: table1\n"
-                                + "     PREAGGREGATION: ON\n"
-                                + "     PREDICATES: `k1` = 1, `k2` = 1"));
+        Assertions.assertTrue(getSQLPlanOrErrorMsg(joinSql).contains("PREDICATES: `k1` = 1, `k2` = 1"));
         String unionSql = "select * from table1 union select * from table2";
-        Assertions.assertTrue(getSQLPlanOrErrorMsg(unionSql).contains(
-                "     TABLE: table1\n"
-                        + "     PREAGGREGATION: ON\n"
-                        + "     PREDICATES: `k1` = 1, `k2` = 1"));
+        Assertions.assertTrue(getSQLPlanOrErrorMsg(unionSql).contains("PREDICATES: `k1` = 1, `k2` = 1"));
         String subQuerySql = "select * from table2 where k1 in (select k1 from table1)";
-        Assertions.assertTrue(getSQLPlanOrErrorMsg(subQuerySql).contains(
-                "     TABLE: table1\n"
-                        + "     PREAGGREGATION: ON\n"
-                        + "     PREDICATES: `k1` = 1, `k2` = 1"));
+        Assertions.assertTrue(getSQLPlanOrErrorMsg(subQuerySql).contains("PREDICATES: `k1` = 1, `k2` = 1"));
         String aliasSql = "select * from table1 t1 join table2 t2 on t1.k1=t2.k1";
-        Assertions.assertTrue(getSQLPlanOrErrorMsg(aliasSql).contains(
-                "     TABLE: table1\n"
-                        + "     PREAGGREGATION: ON\n"
-                        + "     PREDICATES: `k1` = 1, `k2` = 1"));
+        Assertions.assertTrue(getSQLPlanOrErrorMsg(aliasSql).contains("PREDICATES: `k1` = 1, `k2` = 1"));
         dropPolicy("DROP ROW POLICY test_row_policy1 ON test.table1");
         dropPolicy("DROP ROW POLICY test_row_policy2 ON test.table1");
     }
diff --git a/regression-test/data/performance/redundant_conjuncts.out b/regression-test/data/performance/redundant_conjuncts.out
index ab2eadd2ea..af59089638 100644
--- a/regression-test/data/performance/redundant_conjuncts.out
+++ b/regression-test/data/performance/redundant_conjuncts.out
@@ -1,39 +1,27 @@
 -- This file is automatically generated. You should know what you did if you want to edit this
 -- !redundant_conjuncts --
 PLAN FRAGMENT 0
- OUTPUT EXPRS:`v1`
+  OUTPUT EXPRS:`v1`
   PARTITION: HASH_PARTITIONED: `default_cluster:regression_test`.`redundant_conjuncts`.`k1`
 
   VRESULT SINK
 
   0:VOlapScanNode
-     TABLE: redundant_conjuncts
-     PREAGGREGATION: OFF. Reason: No AggregateInfo
+     TABLE: redundant_conjuncts(null), PREAGGREGATION: OFF. Reason: No AggregateInfo
      PREDICATES: `k1` = 1
-     partitions=0/1
-     rollup: null
-     tabletRatio=0/0
-     tabletList=
-     cardinality=0
-     avgRowSize=8.0
-     numNodes=1
+     partitions=0/1, tablets=0/0, tabletList=
+     cardinality=0, avgRowSize=8.0, numNodes=1
 
 -- !redundant_conjuncts_gnerated_by_extract_common_filter --
 PLAN FRAGMENT 0
- OUTPUT EXPRS:`v1`
+  OUTPUT EXPRS:`v1`
   PARTITION: HASH_PARTITIONED: `default_cluster:regression_test`.`redundant_conjuncts`.`k1`
 
   VRESULT SINK
 
   0:VOlapScanNode
-     TABLE: redundant_conjuncts
-     PREAGGREGATION: OFF. Reason: No AggregateInfo
+     TABLE: redundant_conjuncts(null), PREAGGREGATION: OFF. Reason: No AggregateInfo
      PREDICATES: (`k1` = 1 OR `k1` = 2)
-     partitions=0/1
-     rollup: null
-     tabletRatio=0/0
-     tabletList=
-     cardinality=0
-     avgRowSize=8.0
-     numNodes=1
+     partitions=0/1, tablets=0/0, tabletList=
+     cardinality=0, avgRowSize=8.0, numNodes=1
 
diff --git a/regression-test/suites/rollup/test_materialized_view.groovy b/regression-test/suites/rollup/test_materialized_view.groovy
index ea42f0e7fa..07e040bae3 100644
--- a/regression-test/suites/rollup/test_materialized_view.groovy
+++ b/regression-test/suites/rollup/test_materialized_view.groovy
@@ -83,7 +83,7 @@ suite("test_materialized_view", "rollup") {
     Thread.sleep(1000)
     explain{
         sql("SELECT store_id, sum(sale_amt) FROM ${tbName1} GROUP BY store_id")
-        contains("rollup: amt_sum")
+        contains("(amt_sum)")
     }
     qt_sql "SELECT * FROM ${tbName1} order by record_id;"
     qt_sql "SELECT store_id, sum(sale_amt) FROM ${tbName1} GROUP BY store_id order by store_id;"
diff --git a/regression-test/suites/rollup/test_rollup_agg.groovy b/regression-test/suites/rollup/test_rollup_agg.groovy
index 1292d15411..93d29a76a7 100644
--- a/regression-test/suites/rollup/test_rollup_agg.groovy
+++ b/regression-test/suites/rollup/test_rollup_agg.groovy
@@ -72,7 +72,7 @@ suite("test_rollup_agg", "rollup") {
     sql "insert into ${tbName} values(2, 1, 'test2', 100,100,100);"
     explain {
         sql("SELECT citycode,SUM(pv) FROM ${tbName} GROUP BY citycode")
-        contains("rollup: rollup_city")
+        contains("(rollup_city)")
     }
     qt_sql "SELECT citycode,SUM(pv) FROM ${tbName} GROUP BY citycode"
     sql "ALTER TABLE ${tbName} DROP ROLLUP rollup_city;"


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org