[fix] fix bug that show proc "/cluster_balance/history_tablets" return malformat error (#10073)
This commit is contained in:
@ -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;
|
||||
|
||||
@ -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: ");
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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';";
|
||||
|
||||
@ -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`"));
|
||||
}
|
||||
|
||||
@ -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");
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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;"
|
||||
|
||||
@ -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;"
|
||||
|
||||
Reference in New Issue
Block a user