From 1d006684f49a74f9caa4092f7071ff38258ced72 Mon Sep 17 00:00:00 2001 From: zhangdong <493738387@qq.com> Date: Tue, 13 Aug 2024 11:34:02 +0800 Subject: [PATCH 1/5] 1 --- .../org/apache/doris/mtmv/MTMVPartitionExprDateTrunc.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionExprDateTrunc.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionExprDateTrunc.java index 0fcfaa909e66c2..ea15c84d1b925d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionExprDateTrunc.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionExprDateTrunc.java @@ -47,7 +47,7 @@ import java.util.Set; public class MTMVPartitionExprDateTrunc implements MTMVPartitionExprService { - private static Set timeUnits = ImmutableSet.of("year", "month", "day", "hour"); + private static Set timeUnits = ImmutableSet.of("year", "quarter", "week", "month", "day", "hour"); private String timeUnit; public MTMVPartitionExprDateTrunc(FunctionCallExpr functionCallExpr) throws AnalysisException { @@ -198,9 +198,15 @@ private DateTimeV2Literal dateIncrement(DateTimeV2Literal value) throws Analysis case "year": result = value.plusYears(1L); break; + case "quarter": + result = value.plusMonths(3L); + break; case "month": result = value.plusMonths(1L); break; + case "week": + result = value.plusWeeks(1L); + break; case "day": result = value.plusDays(1L); break; From 9118a1085ce29dc2705dcf0121dc73c0ec8b73f4 Mon Sep 17 00:00:00 2001 From: zhangdong <493738387@qq.com> Date: Tue, 13 Aug 2024 11:47:01 +0800 Subject: [PATCH 2/5] 1 --- .../mtmv_p0/test_rollup_partition_mtmv.groovy | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy b/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy index 514c784534c23d..8d436b3f08900d 100644 --- a/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy @@ -61,6 +61,56 @@ suite("test_rollup_partition_mtmv") { exception "only support" } + // quarter + sql """drop table if exists `${tableName}`""" + sql """drop materialized view if exists ${mvName};""" + sql """ + CREATE TABLE `${tableName}` ( + `k1` LARGEINT NOT NULL COMMENT '\"用户id\"', + `k2` DATE NOT NULL COMMENT '\"数据灌入日期时间\"', + `k3` DATE NOT NULL COMMENT '\"日期时间\"' + ) ENGINE=OLAP + DUPLICATE KEY(`k1`) + COMMENT 'OLAP' + PARTITION BY range(`k2`) + ( + PARTITION p_20200101 VALUES [("2020-01-01"),("2020-01-02")), + PARTITION p_20200401 VALUES [("2020-04-01"),("2020-04-02")), + PARTITION p_20200201 VALUES [("2020-02-01"),("2020-02-02")) + ) + DISTRIBUTED BY HASH(`k1`) BUCKETS 2 + PROPERTIES ('replication_num' = '1') ; + """ + sql """ + insert into ${tableName} values(1,"2020-01-01", "2020-01-01"),(2,"2020-04-01", "2020-04-01"),(3,"2020-02-01", "2020-02-01"); + """ + + sql """ + CREATE MATERIALIZED VIEW ${mvName} + BUILD DEFERRED REFRESH AUTO ON MANUAL + partition by (date_trunc(`k2`,'quarter')) + DISTRIBUTED BY RANDOM BUCKETS 2 + PROPERTIES ( + 'replication_num' = '1' + ) + AS + SELECT * FROM ${tableName}; + """ + showPartitionsResult = sql """show partitions from ${mvName}""" + logger.info("showPartitionsResult: " + showPartitionsResult.toString()) + assertEquals(2, showPartitionsResult.size()) + assertTrue(showPartitionsResult.toString().contains("2020-01-01")) + assertTrue(showPartitionsResult.toString().contains("2020-04-01")) + assertTrue(showPartitionsResult.toString().contains("2020-07-01")) + + sql """ + REFRESH MATERIALIZED VIEW ${mvName} AUTO + """ + jobName = getJobName(dbName, mvName); + log.info(jobName) + waitingMTMVTaskFinished(jobName) + order_qt_date_range_month "SELECT * FROM ${mvName} order by k1,k2" + // range date month sql """drop table if exists `${tableName}`""" sql """drop materialized view if exists ${mvName};""" From b698ffa3269103dd7899f9d851237aebb051bd9e Mon Sep 17 00:00:00 2001 From: zhangdong <493738387@qq.com> Date: Tue, 13 Aug 2024 11:55:17 +0800 Subject: [PATCH 3/5] 1 --- .../suites/mtmv_p0/test_rollup_partition_mtmv.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy b/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy index 8d436b3f08900d..ca75d3df0192c1 100644 --- a/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy @@ -109,7 +109,7 @@ suite("test_rollup_partition_mtmv") { jobName = getJobName(dbName, mvName); log.info(jobName) waitingMTMVTaskFinished(jobName) - order_qt_date_range_month "SELECT * FROM ${mvName} order by k1,k2" + order_qt_date_range_quarter "SELECT * FROM ${mvName} order by k1,k2" // range date month sql """drop table if exists `${tableName}`""" From f1307e77a71bd7caa737c3c88ccf23dce705362a Mon Sep 17 00:00:00 2001 From: zhangdong <493738387@qq.com> Date: Tue, 13 Aug 2024 12:06:05 +0800 Subject: [PATCH 4/5] 1 --- .../mtmv_p0/test_rollup_partition_mtmv.groovy | 52 +++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy b/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy index ca75d3df0192c1..a9eeacc1c898bf 100644 --- a/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_rollup_partition_mtmv.groovy @@ -106,11 +106,57 @@ suite("test_rollup_partition_mtmv") { sql """ REFRESH MATERIALIZED VIEW ${mvName} AUTO """ - jobName = getJobName(dbName, mvName); - log.info(jobName) - waitingMTMVTaskFinished(jobName) + waitingMTMVTaskFinishedByMvName(mvName) order_qt_date_range_quarter "SELECT * FROM ${mvName} order by k1,k2" + // week + sql """drop table if exists `${tableName}`""" + sql """drop materialized view if exists ${mvName};""" + sql """ + CREATE TABLE `${tableName}` ( + `k1` LARGEINT NOT NULL COMMENT '\"用户id\"', + `k2` DATE NOT NULL COMMENT '\"数据灌入日期时间\"', + `k3` DATE NOT NULL COMMENT '\"日期时间\"' + ) ENGINE=OLAP + DUPLICATE KEY(`k1`) + COMMENT 'OLAP' + PARTITION BY range(`k2`) + ( + PARTITION p_20200101 VALUES [("2020-01-01"),("2020-01-02")), + PARTITION p_20200102 VALUES [("2020-01-02"),("2020-01-03")), + PARTITION p_20200108 VALUES [("2020-01-08"),("2020-01-09")) + ) + DISTRIBUTED BY HASH(`k1`) BUCKETS 2 + PROPERTIES ('replication_num' = '1') ; + """ + sql """ + insert into ${tableName} values(1,"2020-01-01", "2020-01-01"),(2,"2020-01-02", "2020-01-02"),(3,"2020-01-08", "2020-01-08"); + """ + + sql """ + CREATE MATERIALIZED VIEW ${mvName} + BUILD DEFERRED REFRESH AUTO ON MANUAL + partition by (date_trunc(`k2`,'week')) + DISTRIBUTED BY RANDOM BUCKETS 2 + PROPERTIES ( + 'replication_num' = '1' + ) + AS + SELECT * FROM ${tableName}; + """ + showPartitionsResult = sql """show partitions from ${mvName}""" + logger.info("showPartitionsResult: " + showPartitionsResult.toString()) + assertEquals(2, showPartitionsResult.size()) + assertTrue(showPartitionsResult.toString().contains("2019-12-30")) + assertTrue(showPartitionsResult.toString().contains("2020-01-06")) + assertTrue(showPartitionsResult.toString().contains("2020-01-13")) + + sql """ + REFRESH MATERIALIZED VIEW ${mvName} AUTO + """ + waitingMTMVTaskFinishedByMvName(mvName) + order_qt_date_range_week "SELECT * FROM ${mvName} order by k1,k2" + // range date month sql """drop table if exists `${tableName}`""" sql """drop materialized view if exists ${mvName};""" From a56e0d4c1c3a255266f0bc40ed5b5fe0a6e39ce1 Mon Sep 17 00:00:00 2001 From: zhangdong <493738387@qq.com> Date: Tue, 13 Aug 2024 12:07:37 +0800 Subject: [PATCH 5/5] 1 --- .../data/mtmv_p0/test_rollup_partition_mtmv.out | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/regression-test/data/mtmv_p0/test_rollup_partition_mtmv.out b/regression-test/data/mtmv_p0/test_rollup_partition_mtmv.out index f828e65cc70b39..a41a4087c0a1fd 100644 --- a/regression-test/data/mtmv_p0/test_rollup_partition_mtmv.out +++ b/regression-test/data/mtmv_p0/test_rollup_partition_mtmv.out @@ -1,4 +1,14 @@ -- This file is automatically generated. You should know what you did if you want to edit this +-- !date_range_quarter -- +1 2020-01-01 2020-01-01 +2 2020-04-01 2020-04-01 +3 2020-02-01 2020-02-01 + +-- !date_range_week -- +1 2020-01-01 2020-01-01 +2 2020-01-02 2020-01-02 +3 2020-01-08 2020-01-08 + -- !date_range_month -- 1 2020-01-01 2020-01-01 2 2020-01-02 2020-01-02