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 <pxl...@qq.com> 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: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org