diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMultiTableMaterializedViewStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMultiTableMaterializedViewStmt.java index 5e7cbe9adb..4b1cea4e42 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMultiTableMaterializedViewStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMultiTableMaterializedViewStmt.java @@ -24,7 +24,6 @@ import org.apache.doris.catalog.Database; import org.apache.doris.catalog.Env; import org.apache.doris.catalog.Table; import org.apache.doris.common.AnalysisException; -import org.apache.doris.common.DdlException; import org.apache.doris.common.ErrorCode; import org.apache.doris.common.ErrorReport; import org.apache.doris.common.UserException; @@ -63,6 +62,8 @@ public class CreateMultiTableMaterializedViewStmt extends CreateTableStmt { @Override public void analyze(Analyzer analyzer) throws UserException { refreshInfo.analyze(analyzer); + queryStmt.setNeedToSql(true); + queryStmt.setToSQLWithHint(true); queryStmt.analyze(analyzer); if (queryStmt instanceof SelectStmt) { analyzeSelectClause((SelectStmt) queryStmt); @@ -74,7 +75,7 @@ public class CreateMultiTableMaterializedViewStmt extends CreateTableStmt { super.analyze(analyzer); } - private void analyzeSelectClause(SelectStmt selectStmt) throws AnalysisException, DdlException { + private void analyzeSelectClause(SelectStmt selectStmt) throws AnalysisException { for (TableRef tableRef : selectStmt.getTableRefs()) { Table table = null; if (tableRef instanceof BaseTableRef) { @@ -98,9 +99,8 @@ public class CreateMultiTableMaterializedViewStmt extends CreateTableStmt { columnDefs = generateColumnDefinitions(selectStmt.getSelectList()); } - private List generateColumnDefinitions(SelectList selectList) throws AnalysisException, DdlException { - List mvColumnItems = generateMVColumnItems(selectList); - List schema = generateSchema(mvColumnItems); + private List generateColumnDefinitions(SelectList selectList) throws AnalysisException { + List schema = generateSchema(selectList); return schema.stream() .map(column -> new ColumnDef( column.getName(), @@ -113,45 +113,47 @@ public class CreateMultiTableMaterializedViewStmt extends CreateTableStmt { ).collect(Collectors.toList()); } - private List generateSchema(List mvColumnItems) throws DdlException { - List columns = Lists.newArrayList(); - for (MVColumnItem mvColumnItem : mvColumnItems) { - Table table = tables.get(mvColumnItem.getBaseTableName()); - columns.add(mvColumnItem.toMVColumn(table)); - } - return columns; - } - - private List generateMVColumnItems(SelectList selectList) - throws AnalysisException { - Map uniqueMVColumnItems = Maps.newLinkedHashMap(); + private List generateSchema(SelectList selectList) throws AnalysisException { + Map uniqueMVColumnItems = Maps.newLinkedHashMap(); for (SelectListItem item : selectList.getItems()) { - MVColumnItem mvColumnItem = generateMVColumnItem(item); - if (uniqueMVColumnItems.put(mvColumnItem.getName(), mvColumnItem) != null) { - ErrorReport.reportAnalysisException(ErrorCode.ERR_DUP_FIELDNAME, mvColumnItem.getName()); + Column column = generateMTMVColumn(item); + if (uniqueMVColumnItems.put(column.getName(), column) != null) { + ErrorReport.reportAnalysisException(ErrorCode.ERR_DUP_FIELDNAME, column.getName()); } } - return Lists.newArrayList(uniqueMVColumnItems.values().iterator()); + + return Lists.newArrayList(uniqueMVColumnItems.values()); } - private MVColumnItem generateMVColumnItem(SelectListItem item) { + private Column generateMTMVColumn(SelectListItem item) throws AnalysisException { Expr itemExpr = item.getExpr(); - MVColumnItem mvColumnItem = null; + String alias = item.getAlias(); + Column mtmvColumn = null; if (itemExpr instanceof SlotRef) { SlotRef slotRef = (SlotRef) itemExpr; - String alias = item.getAlias(); String name = (alias != null) ? alias.toLowerCase() : slotRef.getColumnName().toLowerCase(); - mvColumnItem = new MVColumnItem( - name, - slotRef.getType(), - slotRef.getColumn().getAggregationType(), - slotRef.getColumn().isAggregationTypeImplicit(), - null, - slotRef.getColumnName(), - slotRef.getDesc().getParent().getTable().getName() - ); + mtmvColumn = new Column(name, slotRef.getType(), true); + } else if (itemExpr instanceof FunctionCallExpr && ((FunctionCallExpr) itemExpr).isAggregateFunction()) { + FunctionCallExpr functionCallExpr = (FunctionCallExpr) itemExpr; + String functionName = functionCallExpr.getFnName().getFunction(); + MVColumnPattern mvColumnPattern = CreateMaterializedViewStmt.FN_NAME_TO_PATTERN + .get(functionName.toLowerCase()); + if (mvColumnPattern == null) { + throw new AnalysisException( + "Materialized view does not support this function:" + functionCallExpr.toSqlImpl()); + } + if (!mvColumnPattern.match(functionCallExpr)) { + throw new AnalysisException("The function " + functionName + " must match pattern:" + mvColumnPattern); + } + String name; + if (alias != null) { + name = alias.toLowerCase(); + mtmvColumn = new Column(name, functionCallExpr.getType(), true); + } else { + throw new AnalysisException("Function expr: " + functionName + " must have a alias name for MTMV."); + } } - return mvColumnItem; + return mtmvColumn; } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java index 5ecb2a6838..8fc52fbe33 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java @@ -841,4 +841,8 @@ public abstract class QueryStmt extends StatementBase implements Queriable { toSQLWithHint = true; return toSql(); } + + public void setToSQLWithHint(boolean enableSqlSqlWithHint) { + this.toSQLWithHint = enableSqlSqlWithHint; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java index 9b0a6ec445..790d16e7f0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java @@ -141,7 +141,11 @@ public class Column implements Writable, GsonPostProcessable { } public Column(String name, PrimitiveType dataType, boolean isAllowNull) { - this(name, ScalarType.createType(dataType), false, null, isAllowNull, null, ""); + this(name, ScalarType.createType(dataType), isAllowNull); + } + + public Column(String name, Type type, boolean isAllowNull) { + this(name, type, false, null, isAllowNull, null, ""); } public Column(String name, Type type) { diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/customer_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/customer_create.sql new file mode 100644 index 0000000000..d13101b70e --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/customer_create.sql @@ -0,0 +1,15 @@ +CREATE TABLE IF NOT EXISTS `customer` ( + `c_custkey` int(11) NOT NULL COMMENT "", + `c_name` varchar(26) NOT NULL COMMENT "", + `c_address` varchar(41) NOT NULL COMMENT "", + `c_city` varchar(11) NOT NULL COMMENT "", + `c_nation` varchar(16) NOT NULL COMMENT "", + `c_region` varchar(13) NOT NULL COMMENT "", + `c_phone` varchar(16) NOT NULL COMMENT "", + `c_mktsegment` varchar(11) NOT NULL COMMENT "" +) +UNIQUE KEY (`c_custkey`) +DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1 +PROPERTIES ( +"replication_num" = "1" +); \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/customer_delete.sql b/regression-test/suites/mtmv_p0/ssb/ddl/customer_delete.sql new file mode 100644 index 0000000000..fe22a226fe --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/customer_delete.sql @@ -0,0 +1 @@ +truncate table customer; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/date_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/date_create.sql new file mode 100644 index 0000000000..390905ebea --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/date_create.sql @@ -0,0 +1,24 @@ +CREATE TABLE IF NOT EXISTS `dates` ( + `d_datekey` int(11) NOT NULL COMMENT "", + `d_date` varchar(20) NOT NULL COMMENT "", + `d_dayofweek` varchar(10) NOT NULL COMMENT "", + `d_month` varchar(11) NOT NULL COMMENT "", + `d_year` int(11) NOT NULL COMMENT "", + `d_yearmonthnum` int(11) NOT NULL COMMENT "", + `d_yearmonth` varchar(9) NOT NULL COMMENT "", + `d_daynuminweek` int(11) NOT NULL COMMENT "", + `d_daynuminmonth` int(11) NOT NULL COMMENT "", + `d_daynuminyear` int(11) NOT NULL COMMENT "", + `d_monthnuminyear` int(11) NOT NULL COMMENT "", + `d_weeknuminyear` int(11) NOT NULL COMMENT "", + `d_sellingseason` varchar(14) NOT NULL COMMENT "", + `d_lastdayinweekfl` int(11) NOT NULL COMMENT "", + `d_lastdayinmonthfl` int(11) NOT NULL COMMENT "", + `d_holidayfl` int(11) NOT NULL COMMENT "", + `d_weekdayfl` int(11) NOT NULL COMMENT "" +) +UNIQUE KEY (`d_datekey`) +DISTRIBUTED BY HASH(`d_datekey`) BUCKETS 1 +PROPERTIES ( +"replication_num" = "1" +); \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/date_delete.sql b/regression-test/suites/mtmv_p0/ssb/ddl/date_delete.sql new file mode 100644 index 0000000000..3841d4617a --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/date_delete.sql @@ -0,0 +1 @@ +truncate table `dates`; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_create.sql new file mode 100644 index 0000000000..c066ea8a0d --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_create.sql @@ -0,0 +1,24 @@ +CREATE TABLE IF NOT EXISTS `lineorder` ( + `lo_orderkey` bigint(20) NOT NULL COMMENT "", + `lo_linenumber` bigint(20) NOT NULL COMMENT "", + `lo_custkey` int(11) NOT NULL COMMENT "", + `lo_partkey` int(11) NOT NULL COMMENT "", + `lo_suppkey` int(11) NOT NULL COMMENT "", + `lo_orderdate` int(11) NOT NULL COMMENT "", + `lo_orderpriority` varchar(16) NOT NULL COMMENT "", + `lo_shippriority` int(11) NOT NULL COMMENT "", + `lo_quantity` bigint(20) NOT NULL COMMENT "", + `lo_extendedprice` bigint(20) NOT NULL COMMENT "", + `lo_ordtotalprice` bigint(20) NOT NULL COMMENT "", + `lo_discount` bigint(20) NOT NULL COMMENT "", + `lo_revenue` bigint(20) NOT NULL COMMENT "", + `lo_supplycost` bigint(20) NOT NULL COMMENT "", + `lo_tax` bigint(20) NOT NULL COMMENT "", + `lo_commitdate` bigint(20) NOT NULL COMMENT "", + `lo_shipmode` varchar(11) NOT NULL COMMENT "" +) +UNIQUE KEY (`lo_orderkey`, `lo_linenumber`) +DISTRIBUTED BY HASH(`lo_orderkey`) BUCKETS 1 +PROPERTIES ( +"replication_num" = "1" +); \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_delete.sql b/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_delete.sql new file mode 100644 index 0000000000..329e040060 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_delete.sql @@ -0,0 +1 @@ +truncate table lineorder; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_flat_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_flat_create.sql new file mode 100644 index 0000000000..35faee0786 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_flat_create.sql @@ -0,0 +1,45 @@ +CREATE TABLE IF NOT EXISTS `lineorder_flat` ( + `LO_ORDERDATE` date NOT NULL COMMENT "", + `LO_ORDERKEY` int(11) NOT NULL COMMENT "", + `LO_LINENUMBER` tinyint(4) NOT NULL COMMENT "", + `LO_CUSTKEY` int(11) NOT NULL COMMENT "", + `LO_PARTKEY` int(11) NOT NULL COMMENT "", + `LO_SUPPKEY` int(11) NOT NULL COMMENT "", + `LO_ORDERPRIORITY` varchar(100) NOT NULL COMMENT "", + `LO_SHIPPRIORITY` tinyint(4) NOT NULL COMMENT "", + `LO_QUANTITY` tinyint(4) NOT NULL COMMENT "", + `LO_EXTENDEDPRICE` int(11) NOT NULL COMMENT "", + `LO_ORDTOTALPRICE` int(11) NOT NULL COMMENT "", + `LO_DISCOUNT` tinyint(4) NOT NULL COMMENT "", + `LO_REVENUE` int(11) NOT NULL COMMENT "", + `LO_SUPPLYCOST` int(11) NOT NULL COMMENT "", + `LO_TAX` tinyint(4) NOT NULL COMMENT "", + `LO_COMMITDATE` date NOT NULL COMMENT "", + `LO_SHIPMODE` varchar(100) NOT NULL COMMENT "", + `C_NAME` varchar(100) NOT NULL COMMENT "", + `C_ADDRESS` varchar(100) NOT NULL COMMENT "", + `C_CITY` varchar(100) NOT NULL COMMENT "", + `C_NATION` varchar(100) NOT NULL COMMENT "", + `C_REGION` varchar(100) NOT NULL COMMENT "", + `C_PHONE` varchar(100) NOT NULL COMMENT "", + `C_MKTSEGMENT` varchar(100) NOT NULL COMMENT "", + `S_NAME` varchar(100) NOT NULL COMMENT "", + `S_ADDRESS` varchar(100) NOT NULL COMMENT "", + `S_CITY` varchar(100) NOT NULL COMMENT "", + `S_NATION` varchar(100) NOT NULL COMMENT "", + `S_REGION` varchar(100) NOT NULL COMMENT "", + `S_PHONE` varchar(100) NOT NULL COMMENT "", + `P_NAME` varchar(100) NOT NULL COMMENT "", + `P_MFGR` varchar(100) NOT NULL COMMENT "", + `P_CATEGORY` varchar(100) NOT NULL COMMENT "", + `P_BRAND` varchar(100) NOT NULL COMMENT "", + `P_COLOR` varchar(100) NOT NULL COMMENT "", + `P_TYPE` varchar(100) NOT NULL COMMENT "", + `P_SIZE` tinyint(4) NOT NULL COMMENT "", + `P_CONTAINER` varchar(100) NOT NULL COMMENT "" +) ENGINE=OLAP +UNIQUE KEY(`LO_ORDERDATE`, `LO_ORDERKEY`, `LO_LINENUMBER`) +DISTRIBUTED BY HASH(`LO_ORDERKEY`) BUCKETS 1 +PROPERTIES ( +"replication_num" = "1" +); \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_flat_delete.sql b/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_flat_delete.sql new file mode 100644 index 0000000000..13f6c32bb6 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/lineorder_flat_delete.sql @@ -0,0 +1 @@ +truncate table lineorder_flat; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/part_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/part_create.sql new file mode 100644 index 0000000000..2405026a3c --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/part_create.sql @@ -0,0 +1,16 @@ +CREATE TABLE IF NOT EXISTS `part` ( + `p_partkey` int(11) NOT NULL COMMENT "", + `p_name` varchar(23) NOT NULL COMMENT "", + `p_mfgr` varchar(7) NOT NULL COMMENT "", + `p_category` varchar(8) NOT NULL COMMENT "", + `p_brand` varchar(10) NOT NULL COMMENT "", + `p_color` varchar(12) NOT NULL COMMENT "", + `p_type` varchar(26) NOT NULL COMMENT "", + `p_size` int(11) NOT NULL COMMENT "", + `p_container` varchar(11) NOT NULL COMMENT "" +) +UNIQUE KEY (`p_partkey`) +DISTRIBUTED BY HASH(`p_partkey`) BUCKETS 1 +PROPERTIES ( +"replication_num" = "1" +); \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/part_delete.sql b/regression-test/suites/mtmv_p0/ssb/ddl/part_delete.sql new file mode 100644 index 0000000000..02c6abd253 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/part_delete.sql @@ -0,0 +1 @@ +truncate table `part`; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_flat_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_flat_create.sql new file mode 100644 index 0000000000..e5cbc1a556 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_flat_create.sql @@ -0,0 +1,52 @@ +CREATE MATERIALIZED VIEW ssb_flat +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(lo_orderkey) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT + LO_ORDERDATE, + LO_ORDERKEY, + LO_LINENUMBER, + LO_CUSTKEY, + LO_PARTKEY, + LO_SUPPKEY, + LO_ORDERPRIORITY, + LO_SHIPPRIORITY, + LO_QUANTITY, + LO_EXTENDEDPRICE, + LO_ORDTOTALPRICE, + LO_DISCOUNT, + LO_REVENUE, + LO_SUPPLYCOST, + LO_TAX, + LO_COMMITDATE, + LO_SHIPMODE, + C_NAME, + C_ADDRESS, + C_CITY, + C_NATION, + C_REGION, + C_PHONE, + C_MKTSEGMENT, + S_NAME, + S_ADDRESS, + S_CITY, + S_NATION, + S_REGION, + S_PHONE, + P_NAME, + P_MFGR, + P_CATEGORY, + P_BRAND, + P_COLOR, + P_TYPE, + P_SIZE, + P_CONTAINER +FROM +lineorder as l +INNER JOIN customer c +ON (c.c_custkey = l.lo_custkey) +INNER JOIN supplier s +ON (s.s_suppkey = l.lo_suppkey) +INNER JOIN part p +ON (p.p_partkey = l.lo_partkey); \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q11_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q11_create.sql new file mode 100644 index 0000000000..fdf1a1462f --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q11_create.sql @@ -0,0 +1,12 @@ +CREATE MATERIALIZED VIEW ssb_q11 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(REVENUE) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT SUM(lo_extendedprice * lo_discount) AS REVENUE +FROM lineorder, dates +WHERE + lo_orderdate = d_datekey + AND d_year = 1993 + AND lo_discount BETWEEN 1 AND 3 + AND lo_quantity < 25; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q12_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q12_create.sql new file mode 100644 index 0000000000..fcf1fbd931 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q12_create.sql @@ -0,0 +1,12 @@ +CREATE MATERIALIZED VIEW ssb_q12 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(REVENUE) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT SUM(lo_extendedprice * lo_discount) AS REVENUE +FROM lineorder, dates +WHERE + lo_orderdate = d_datekey + AND d_year = 1993 + AND lo_discount BETWEEN 1 AND 3 + AND lo_quantity < 25; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q13_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q13_create.sql new file mode 100644 index 0000000000..2da36bc129 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q13_create.sql @@ -0,0 +1,14 @@ +CREATE MATERIALIZED VIEW ssb_q13 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(REVENUE) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT + SUM(lo_extendedprice * lo_discount) AS REVENUE +FROM lineorder, dates +WHERE + lo_orderdate = d_datekey + AND d_weeknuminyear = 6 + AND d_year = 1994 + AND lo_discount BETWEEN 5 AND 7 + AND lo_quantity BETWEEN 26 AND 35; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q21_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q21_create.sql new file mode 100644 index 0000000000..9f0ffc7e10 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q21_create.sql @@ -0,0 +1,15 @@ +CREATE MATERIALIZED VIEW ssb_q21 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(p_brand) BUCKETS 16 +PROPERTIES ('replication_num' = '1') +AS +SELECT SUM(lo_revenue) as revenue, d_year, p_brand +FROM lineorder, dates, part, supplier +WHERE + lo_orderdate = d_datekey + AND lo_partkey = p_partkey + AND lo_suppkey = s_suppkey + AND p_category = 'MFGR#12' + AND s_region = 'AMERICA' +GROUP BY d_year, p_brand +ORDER BY p_brand; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q22_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q22_create.sql new file mode 100644 index 0000000000..481586e1f4 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q22_create.sql @@ -0,0 +1,15 @@ +CREATE MATERIALIZED VIEW ssb_q22 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(p_brand) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT SUM(lo_revenue) as lo_revenue, d_year, p_brand +FROM lineorder, dates, part, supplier +WHERE + lo_orderdate = d_datekey + AND lo_partkey = p_partkey + AND lo_suppkey = s_suppkey + AND p_brand BETWEEN 'MFGR#2221' AND 'MFGR#2228' + AND s_region = 'ASIA' +GROUP BY d_year, p_brand +ORDER BY d_year, p_brand; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q23_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q23_create.sql new file mode 100644 index 0000000000..dbaf3bb234 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q23_create.sql @@ -0,0 +1,15 @@ +CREATE MATERIALIZED VIEW ssb_q23 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(p_brand) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT SUM(lo_revenue) as revenue, d_year, p_brand +FROM lineorder, dates, part, supplier +WHERE + lo_orderdate = d_datekey + AND lo_partkey = p_partkey + AND lo_suppkey = s_suppkey + AND p_brand = 'MFGR#2239' + AND s_region = 'EUROPE' +GROUP BY d_year, p_brand +ORDER BY d_year, p_brand; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q31_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q31_create.sql new file mode 100644 index 0000000000..e757cca418 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q31_create.sql @@ -0,0 +1,21 @@ +CREATE MATERIALIZED VIEW ssb_q31 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(c_nation, s_nation) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT + c_nation, + s_nation, + d_year, + SUM(lo_revenue) AS REVENUE +FROM customer, lineorder, supplier, dates +WHERE + lo_custkey = c_custkey + AND lo_suppkey = s_suppkey + AND lo_orderdate = d_datekey + AND c_region = 'ASIA' + AND s_region = 'ASIA' + AND d_year >= 1992 + AND d_year <= 1997 +GROUP BY c_nation, s_nation, d_year +ORDER BY d_year ASC, REVENUE DESC; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q32_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q32_create.sql new file mode 100644 index 0000000000..fdbcd11d05 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q32_create.sql @@ -0,0 +1,21 @@ +CREATE MATERIALIZED VIEW ssb_q32 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(c_city, s_city) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT + c_city, + s_city, + d_year, + SUM(lo_revenue) AS REVENUE +FROM customer, lineorder, supplier, dates +WHERE + lo_custkey = c_custkey + AND lo_suppkey = s_suppkey + AND lo_orderdate = d_datekey + AND c_nation = 'UNITED STATES' + AND s_nation = 'UNITED STATES' + AND d_year >= 1992 + AND d_year <= 1997 +GROUP BY c_city, s_city, d_year +ORDER BY d_year ASC, REVENUE DESC; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q33_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q33_create.sql new file mode 100644 index 0000000000..a23ef06708 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q33_create.sql @@ -0,0 +1,27 @@ +CREATE MATERIALIZED VIEW ssb_q33 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(c_city, s_city) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT + c_city, + s_city, + d_year, + SUM(lo_revenue) AS REVENUE +FROM customer, lineorder, supplier, dates +WHERE + lo_custkey = c_custkey + AND lo_suppkey = s_suppkey + AND lo_orderdate = d_datekey + AND ( + c_city = 'UNITED KI1' + OR c_city = 'UNITED KI5' + ) + AND ( + s_city = 'UNITED KI1' + OR s_city = 'UNITED KI5' + ) + AND d_year >= 1992 + AND d_year <= 1997 +GROUP BY c_city, s_city, d_year +ORDER BY d_year ASC, REVENUE DESC; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q34_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q34_create.sql new file mode 100644 index 0000000000..452fa67a79 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q34_create.sql @@ -0,0 +1,26 @@ +CREATE MATERIALIZED VIEW ssb_q34 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(c_city, s_city) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT + c_city, + s_city, + d_year, + SUM(lo_revenue) AS REVENUE +FROM customer, lineorder, supplier, dates +WHERE + lo_custkey = c_custkey + AND lo_suppkey = s_suppkey + AND lo_orderdate = d_datekey + AND ( + c_city = 'UNITED KI1' + OR c_city = 'UNITED KI5' + ) + AND ( + s_city = 'UNITED KI1' + OR s_city = 'UNITED KI5' + ) + AND d_yearmonth = 'Dec1997' +GROUP BY c_city, s_city, d_year +ORDER BY d_year ASC, REVENUE DESC; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q41_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q41_create.sql new file mode 100644 index 0000000000..244b9f94cb --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q41_create.sql @@ -0,0 +1,23 @@ +CREATE MATERIALIZED VIEW ssb_q41 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(c_nation) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT /*+SET_VAR(parallel_fragment_exec_instance_num=4, enable_vectorized_engine=true, batch_size=4096, enable_cost_based_join_reorder=true, enable_projection=true) */ + d_year, + c_nation, + SUM(lo_revenue - lo_supplycost) AS PROFIT +FROM dates, customer, supplier, part, lineorder +WHERE + lo_custkey = c_custkey + AND lo_suppkey = s_suppkey + AND lo_partkey = p_partkey + AND lo_orderdate = d_datekey + AND c_region = 'AMERICA' + AND s_region = 'AMERICA' + AND ( + p_mfgr = 'MFGR#1' + OR p_mfgr = 'MFGR#2' + ) +GROUP BY d_year, c_nation +ORDER BY d_year, c_nation; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q42_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q42_create.sql new file mode 100644 index 0000000000..044dea2086 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q42_create.sql @@ -0,0 +1,28 @@ +CREATE MATERIALIZED VIEW ssb_q42 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(s_nation, p_category) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT /*+SET_VAR(parallel_fragment_exec_instance_num=2, enable_vectorized_engine=true, batch_size=4096, enable_cost_based_join_reorder=true, enable_projection=true) */ + d_year, + s_nation, + p_category, + SUM(lo_revenue - lo_supplycost) AS PROFIT +FROM dates, customer, supplier, part, lineorder +WHERE + lo_custkey = c_custkey + AND lo_suppkey = s_suppkey + AND lo_partkey = p_partkey + AND lo_orderdate = d_datekey + AND c_region = 'AMERICA' + AND s_region = 'AMERICA' + AND ( + d_year = 1997 + OR d_year = 1998 + ) + AND ( + p_mfgr = 'MFGR#1' + OR p_mfgr = 'MFGR#2' + ) +GROUP BY d_year, s_nation, p_category +ORDER BY d_year, s_nation, p_category; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q43_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q43_create.sql new file mode 100644 index 0000000000..0d60a20c37 --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/ssb_q43_create.sql @@ -0,0 +1,24 @@ +CREATE MATERIALIZED VIEW ssb_q43 +BUILD IMMEDIATE REFRESH COMPLETE +DISTRIBUTED BY HASH(s_city, p_brand) BUCKETS 6 +PROPERTIES ('replication_num' = '1') +AS +SELECT /*+SET_VAR(parallel_fragment_exec_instance_num=2, enable_vectorized_engine=true, batch_size=4096, enable_cost_based_join_reorder=true, enable_projection=true) */ + d_year, + s_city, + p_brand, + SUM(lo_revenue - lo_supplycost) AS PROFIT +FROM dates, customer, supplier, part, lineorder +WHERE + lo_custkey = c_custkey + AND lo_suppkey = s_suppkey + AND lo_partkey = p_partkey + AND lo_orderdate = d_datekey + AND s_nation = 'UNITED STATES' + AND ( + d_year = 1997 + OR d_year = 1998 + ) + AND p_category = 'MFGR#14' +GROUP BY d_year, s_city, p_brand +ORDER BY d_year, s_city, p_brand; diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/supplier_create.sql b/regression-test/suites/mtmv_p0/ssb/ddl/supplier_create.sql new file mode 100644 index 0000000000..1580a8fcca --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/supplier_create.sql @@ -0,0 +1,14 @@ +CREATE TABLE IF NOT EXISTS `supplier` ( + `s_suppkey` int(11) NOT NULL COMMENT "", + `s_name` varchar(26) NOT NULL COMMENT "", + `s_address` varchar(26) NOT NULL COMMENT "", + `s_city` varchar(11) NOT NULL COMMENT "", + `s_nation` varchar(16) NOT NULL COMMENT "", + `s_region` varchar(13) NOT NULL COMMENT "", + `s_phone` varchar(16) NOT NULL COMMENT "" +) +UNIQUE KEY (`s_suppkey`) +DISTRIBUTED BY HASH(`s_suppkey`) BUCKETS 1 +PROPERTIES ( +"replication_num" = "1" +); \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/ddl/supplier_delete.sql b/regression-test/suites/mtmv_p0/ssb/ddl/supplier_delete.sql new file mode 100644 index 0000000000..39e663134c --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/ddl/supplier_delete.sql @@ -0,0 +1 @@ +truncate table `supplier`; \ No newline at end of file diff --git a/regression-test/suites/mtmv_p0/ssb/test_mtmv_ssb_ddl.groovy b/regression-test/suites/mtmv_p0/ssb/test_mtmv_ssb_ddl.groovy new file mode 100644 index 0000000000..0305dccf3a --- /dev/null +++ b/regression-test/suites/mtmv_p0/ssb/test_mtmv_ssb_ddl.groovy @@ -0,0 +1,35 @@ +// 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. + +suite("test_mtmv_ssb_ddl") { + def ssb_tables = ["customer", "lineorder", "part", "date", "supplier"] + + for (String table in ssb_tables) { + sql new File("""${context.file.parent}/ddl/${table}_create.sql""").text + sql new File("""${context.file.parent}/ddl/${table}_delete.sql""").text + } + + def ssb_mtmvs = ["ssb_flat", "ssb_q11", "ssb_q12", "ssb_q13", "ssb_q21", "ssb_q22", "ssb_q23", + "ssb_q31", "ssb_q32", "ssb_q33", "ssb_q34", "ssb_q31", "ssb_q42", "ssb_q43"] + + for (String mvName in ssb_mtmvs) { + sql "drop MATERIALIZED VIEW IF EXISTS ${mvName}" + println "run mtmv ddl: ${mvName}" + sql new File("""${context.file.parent}/ddl/${mvName}_create.sql""").text + waitingMTMVTaskFinished(mvName) + } +}