This is an automated email from the ASF dual-hosted git repository.
panxiaolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 28c55f15c9 [Enchancement](Materialized-View) add more error infomation
for select materialized view fail (#17262)
28c55f15c9 is described below
commit 28c55f15c98f0c6ffd403f532b7b1c951759150c
Author: Pxl <[email protected]>
AuthorDate: Mon Mar 6 18:59:46 2023 +0800
[Enchancement](Materialized-View) add more error infomation for select
materialized view fail (#17262)
add more error infomation for select materialized view fail
---
.../java/org/apache/doris/analysis/SlotRef.java | 9 +++
.../apache/doris/planner/SingleNodePlanner.java | 13 ++++-
.../mv_with_view/mv_with_view.groovy | 4 ++
.../test_mv_useless/test_agg_mv_useless.groovy | 47 +---------------
.../test_mv_useless/test_dup_mv_useless.groovy | 65 ++--------------------
.../test_mv_useless/test_uniq_mv_useless.groovy | 16 +-----
6 files changed, 33 insertions(+), 121 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
index aa10992ee8..ffb8c2ef37 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
@@ -551,10 +551,19 @@ public class SlotRef extends Expr {
if (!(originExpr instanceof SlotRef)) {
return true; // means this is alias of other expr.
}
+
SlotRef aliasExpr = (SlotRef) originExpr;
if (aliasExpr.getColumnName() == null) {
+ if (desc.getSourceExprs() != null) {
+ for (Expr expr : desc.getSourceExprs()) {
+ if (!expr.matchExprs(exprs, stmt, ignoreAlias, tableName))
{
+ return false;
+ }
+ }
+ }
return true; // means this is alias of other expr.
}
+
if (aliasExpr.desc != null) {
TableIf table = aliasExpr.desc.getParent().getTable();
if (table != null && table.getName() != tableName) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
index b6abbb8b30..cab354b0be 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
@@ -68,6 +68,7 @@ import org.apache.doris.common.UserException;
import org.apache.doris.common.util.VectorizedUtil;
import org.apache.doris.planner.external.ExternalFileScanNode;
import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.rewrite.mvrewrite.MVSelectFailedException;
import org.apache.doris.thrift.TNullSide;
import org.apache.doris.thrift.TPushAggOp;
@@ -1316,8 +1317,10 @@ public class SingleNodePlanner {
}
public boolean selectMaterializedView(QueryStmt queryStmt, Analyzer
analyzer)
- throws UserException {
+ throws UserException, MVSelectFailedException {
boolean selectFailed = false;
+ boolean haveError = false;
+ String errorMsg = "select fail reason: ";
if (queryStmt instanceof SelectStmt) {
SelectStmt selectStmt = (SelectStmt) queryStmt;
for (TableRef tableRef : selectStmt.getTableRefs()) {
@@ -1364,6 +1367,11 @@ public class SingleNodePlanner {
selectStmt.getAggInfo().updateTypeOfAggregateExprs();
}
} catch (Exception e) {
+ if (haveError) {
+ errorMsg += ",";
+ }
+ errorMsg += e.getMessage();
+ haveError = true;
tupleSelectFailed = true;
}
}
@@ -1379,6 +1387,9 @@ public class SingleNodePlanner {
selectFailed |=
selectMaterializedView(unionOperand.getQueryStmt(), analyzer);
}
}
+ if (haveError) {
+ throw new MVSelectFailedException(errorMsg);
+ }
return selectFailed;
}
diff --git
a/regression-test/suites/materialized_view_p0/mv_with_view/mv_with_view.groovy
b/regression-test/suites/materialized_view_p0/mv_with_view/mv_with_view.groovy
index 4b794b7cb1..4c147d51ac 100644
---
a/regression-test/suites/materialized_view_p0/mv_with_view/mv_with_view.groovy
+++
b/regression-test/suites/materialized_view_p0/mv_with_view/mv_with_view.groovy
@@ -45,6 +45,10 @@ suite ("mv_with_view") {
}
qt_select_star "select * from d_table order by k1;"
+ sql """
+ drop view if exists v_k132;
+ """
+
sql """
create view v_k132 as select k1,k3,k2 from d_table where k1 = 1;
"""
diff --git
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_agg_mv_useless.groovy
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_agg_mv_useless.groovy
index 16bb73b2b8..e818fda575 100644
---
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_agg_mv_useless.groovy
+++
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_agg_mv_useless.groovy
@@ -57,49 +57,8 @@ suite ("test_agg_mv_useless") {
exception "errCode = 2,"
}
- sql "create materialized view k1_u1 as select k1 from ${testTable} group
by k1;"
- max_try_secs = 60
- while (max_try_secs--) {
- String res = getJobState(testTable)
- if (res == "FINISHED") {
- break
- } else {
- Thread.sleep(2000)
- if (max_try_secs < 1) {
- println "test timeout," + "state:" + res
- assertEquals("FINISHED",res)
- }
- }
- }
-
- sql "create materialized view k1_k2_u21 as select k2,k1 from ${testTable}
group by k2,k1 order by k2,k1;"
- max_try_secs = 60
- while (max_try_secs--) {
- String res = getJobState(testTable)
- if (res == "FINISHED") {
- break
- } else {
- Thread.sleep(2000)
- if (max_try_secs < 1) {
- println "test timeout," + "state:" + res
- assertEquals("FINISHED",res)
- }
- }
- }
-
- sql "create materialized view k1_sumk3 as select k1,sum(k3) from
${testTable} group by k1;"
- max_try_secs = 60
- while (max_try_secs--) {
- String res = getJobState(testTable)
- if (res == "FINISHED") {
- break
- } else {
- Thread.sleep(2000)
- if (max_try_secs < 1) {
- println "test timeout," + "state:" + res
- assertEquals("FINISHED",res)
- }
- }
- }
+ createMV("create materialized view k1_u1 as select k1 from ${testTable}
group by k1;")
+ createMV("create materialized view k1_k2_u21 as select k2,k1 from
${testTable} group by k2,k1 order by k2,k1;")
+ createMV("create materialized view k1_sumk3 as select k1,sum(k3) from
${testTable} group by k1;")
sql "insert into ${testTable} select 4,4,4;"
}
diff --git
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_dup_mv_useless.groovy
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_dup_mv_useless.groovy
index 6cb308b8bd..914c713309 100644
---
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_dup_mv_useless.groovy
+++
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_dup_mv_useless.groovy
@@ -49,66 +49,9 @@ suite ("test_dup_mv_useless") {
exception "errCode = 2,"
}
- sql "create materialized view k1_u1 as select k1 from ${testTable} group
by k1;"
- max_try_secs = 60
- while (max_try_secs--) {
- String res = getJobState(testTable)
- if (res == "FINISHED") {
- Thread.sleep(5000)
- break
- } else {
- Thread.sleep(2000)
- if (max_try_secs < 1) {
- println "test timeout," + "state:" + res
- assertEquals("FINISHED",res)
- }
- }
- }
- sql "create materialized view k1_k2_u12 as select k1,k2 from ${testTable}
group by k1,k2;"
- max_try_secs = 60
- while (max_try_secs--) {
- String res = getJobState(testTable)
- if (res == "FINISHED") {
- Thread.sleep(5000)
- break
- } else {
- Thread.sleep(2000)
- if (max_try_secs < 1) {
- println "test timeout," + "state:" + res
- assertEquals("FINISHED",res)
- }
- }
- }
- sql "create materialized view k1_k2_u21 as select k2,k1 from ${testTable}
group by k2,k1 order by k2,k1;"
- max_try_secs = 60
- while (max_try_secs--) {
- String res = getJobState(testTable)
- if (res == "FINISHED") {
- Thread.sleep(5000)
- break
- } else {
- Thread.sleep(2000)
- if (max_try_secs < 1) {
- println "test timeout," + "state:" + res
- assertEquals("FINISHED",res)
- }
- }
- }
- sql " create materialized view k1_k2_sumk3 as select k1,k2,sum(k3) from
${testTable} group by k1,k2;"
- max_try_secs = 60
- while (max_try_secs--) {
- String res = getJobState(testTable)
- if (res == "FINISHED") {
- Thread.sleep(5000)
- break
- } else {
- Thread.sleep(2000)
- if (max_try_secs < 1) {
- println "test timeout," + "state:" + res
- assertEquals("FINISHED",res)
- }
- }
- }
-
+ createMV("create materialized view k1_u1 as select k1 from ${testTable}
group by k1;")
+ createMV("create materialized view k1_k2_u12 as select k1,k2 from
${testTable} group by k1,k2;")
+ createMV("create materialized view k1_k2_u21 as select k2,k1 from
${testTable} group by k2,k1 order by k2,k1;")
+ createMV("create materialized view k1_k2_sumk3 as select k1,k2,sum(k3)
from ${testTable} group by k1,k2;")
sql "insert into ${testTable} select 4,4,4;"
}
diff --git
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_uniq_mv_useless.groovy
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_uniq_mv_useless.groovy
index 1d79d442db..50d12f4028 100644
---
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_uniq_mv_useless.groovy
+++
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_uniq_mv_useless.groovy
@@ -53,20 +53,6 @@ suite ("test_uniq_mv_useless") {
exception "errCode = 2,"
}
- sql "create materialized view k1_k2_u21 as select k2,k1 from ${testTable}
group by k2,k1 order by k2,k1;"
- max_try_secs = 60
- while (max_try_secs--) {
- String res = getJobState(testTable)
- if (res == "FINISHED") {
- break
- } else {
- Thread.sleep(2000)
- if (max_try_secs < 1) {
- println "test timeout," + "state:" + res
- assertEquals("FINISHED",res)
- }
- }
- }
-
+ createMV ("create materialized view k1_k2_u21 as select k2,k1 from
${testTable} group by k2,k1 order by k2,k1;")
sql "insert into ${testTable} select 4,4,4;"
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]