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 5dabfa84d17 [Chore](materialized-view) check agg mv has group by
clause (#39759)
5dabfa84d17 is described below
commit 5dabfa84d17a6e65ad644b4a12f577ecb2597088
Author: Pxl <[email protected]>
AuthorDate: Thu Aug 22 19:41:29 2024 +0800
[Chore](materialized-view) check agg mv has group by clause (#39759)
## Proposed changes
check agg mv has group by clause
---
.../doris/analysis/CreateMaterializedViewStmt.java | 9 +++-
.../suites/mv_p0/agg_no_group/agg_no_group.groovy | 63 ++++++++++++++++++++++
.../suites/statistics/test_analyze_mv.groovy | 2 +-
3 files changed, 72 insertions(+), 2 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
index 0e768ad3a95..68ec8238702 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
@@ -344,9 +344,16 @@ public class CreateMaterializedViewStmt extends DdlStmt
implements NotFallbackIn
}
private void analyzeGroupByClause() throws AnalysisException {
- if (isReplay || selectStmt.getGroupByClause() == null) {
+ if (isReplay) {
return;
}
+ if (selectStmt.getGroupByClause() == null && mvKeysType ==
KeysType.AGG_KEYS) {
+ throw new AnalysisException("agg mv must has group by clause");
+ }
+ if (selectStmt.getGroupByClause() == null) {
+ return;
+ }
+
List<Expr> groupingExprs =
selectStmt.getGroupByClause().getGroupingExprs();
List<FunctionCallExpr> aggregateExprs =
selectStmt.getAggInfo().getAggregateExprs();
List<Expr> selectExprs = selectStmt.getSelectList().getExprs();
diff --git a/regression-test/suites/mv_p0/agg_no_group/agg_no_group.groovy
b/regression-test/suites/mv_p0/agg_no_group/agg_no_group.groovy
new file mode 100644
index 00000000000..c089374ac3a
--- /dev/null
+++ b/regression-test/suites/mv_p0/agg_no_group/agg_no_group.groovy
@@ -0,0 +1,63 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+import org.codehaus.groovy.runtime.IOGroovyMethods
+
+suite ("agg_no_group") {
+ sql "DROP TABLE IF EXISTS lineitem_2_agg"
+ sql """
+ CREATE TABLE `lineitem_2_agg` (
+ `l_orderkey` BIGINT NULL,
+ `l_linenumber` INT NULL,
+ `l_partkey` INT NULL,
+ `l_suppkey` INT NULL,
+ `l_shipdate` DATE not NULL,
+ `l_quantity` DECIMAL(15, 2) sum,
+ `l_extendedprice` DECIMAL(15, 2) sum,
+ `l_discount` DECIMAL(15, 2) sum,
+ `l_tax` DECIMAL(15, 2) sum,
+ `l_returnflag` VARCHAR(1) replace,
+ `l_linestatus` VARCHAR(1) replace,
+ `l_commitdate` DATE replace,
+ `l_receiptdate` DATE replace,
+ `l_shipinstruct` VARCHAR(25) replace,
+ `l_shipmode` VARCHAR(10) replace,
+ `l_comment` VARCHAR(44) replace
+ ) ENGINE=OLAP
+ aggregate KEY(l_orderkey, l_linenumber, l_partkey, l_suppkey,
l_shipdate )
+ COMMENT 'OLAP'
+ auto partition by range (date_trunc(`l_shipdate`, 'day')) ()
+ DISTRIBUTED BY HASH(`l_orderkey`) BUCKETS 96
+ PROPERTIES (
+ "replication_allocation" = "tag.location.default: 1"
+ );
+ """
+ sql """insert into lineitem_2_agg values
+ (null, 1, 2, 3, '2023-10-17', 5.5, 6.5, 7.5, 8.5, 'o', 'k',
'2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy'),
+ (1, null, 3, 1, '2023-10-17', 5.5, 6.5, 7.5, 8.5, 'o', 'k',
'2023-10-18', '2023-10-18', 'a', 'b', 'yyyyyyyyy'),
+ (3, 3, null, 2, '2023-10-19', 7.5, 8.5, 9.5, 10.5, 'k', 'o',
'2023-10-19', '2023-10-19', 'c', 'd', 'xxxxxxxxx'),
+ (1, 2, 3, null, '2023-10-17', 5.5, 6.5, 7.5, 8.5, 'o', 'k',
'2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy'),
+ (2, 3, 2, 1, '2023-10-18', 5.5, 6.5, 7.5, 8.5, 'o', 'k', null,
'2023-10-18', 'a', 'b', 'yyyyyyyyy'),
+ (3, 1, 1, 2, '2023-10-19', 7.5, 8.5, 9.5, 10.5, 'k', 'o',
'2023-10-19', null, 'c', 'd', 'xxxxxxxxx'),
+ (1, 3, 2, 2, '2023-10-17', 5.5, 6.5, 7.5, 8.5, 'o', 'k',
'2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy');"""
+
+ test {
+ sql """CREATE MATERIALIZED VIEW mv_name_2_3_5 AS
+ select l_shipdate, l_partkey, l_orderkey from lineitem_2_agg"""
+ exception "agg mv must has group by clause"
+ }
+}
diff --git a/regression-test/suites/statistics/test_analyze_mv.groovy
b/regression-test/suites/statistics/test_analyze_mv.groovy
index 444aa1eb724..44a4bbc5aa8 100644
--- a/regression-test/suites/statistics/test_analyze_mv.groovy
+++ b/regression-test/suites/statistics/test_analyze_mv.groovy
@@ -256,7 +256,7 @@ suite("test_analyze_mv") {
);
"""
- createMV("create materialized view mv1 as select key2 from mvTestAgg;")
+ createMV("create materialized view mv1 as select key2 from mvTestAgg group
by key2;")
createMV("create materialized view mv3 as select key1, key2, sum(value1),
max(value2), min(value3) from mvTestAgg group by key1, key2;")
createMV("create materialized view mv6 as select key1, sum(value1) from
mvTestAgg group by key1;")
sql """alter table mvTestAgg ADD ROLLUP rollup1(key1, value1)"""
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]