[test](mtmv)Add the cases of upgrade and downgrade of mtmv (#39289)
pick from #38868 ## Proposed changes [test](mtmv)Add the cases of upgrade and downgrade of mtmv
This commit is contained in:
128
regression-test/suites/nereids_rules_p0/mv_up_down/load.groovy
Normal file
128
regression-test/suites/nereids_rules_p0/mv_up_down/load.groovy
Normal file
@ -0,0 +1,128 @@
|
||||
// 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_upgrade_downgrade_prepare_mtmv","p0,mtmv,restart_fe") {
|
||||
|
||||
String db = context.config.getDbNameByFile(context.file)
|
||||
String orders_tb = "up_down_mtmv_orders"
|
||||
String lineitem_tb = "up_down_mtmv_lineitem"
|
||||
String mtmv_name = "up_down_mtmv_test_mv"
|
||||
sql "use ${db}"
|
||||
|
||||
|
||||
sql """
|
||||
drop table if exists ${orders_tb}
|
||||
"""
|
||||
|
||||
sql """CREATE TABLE `${orders_tb}` (
|
||||
`o_orderkey` BIGINT NULL,
|
||||
`o_custkey` INT NULL,
|
||||
`o_orderstatus` VARCHAR(1) NULL,
|
||||
`o_totalprice` DECIMAL(15, 2) NULL,
|
||||
`o_orderpriority` VARCHAR(15) NULL,
|
||||
`o_clerk` VARCHAR(15) NULL,
|
||||
`o_shippriority` INT NULL,
|
||||
`o_comment` VARCHAR(79) NULL,
|
||||
`o_orderdate` DATE not NULL
|
||||
) ENGINE=OLAP
|
||||
DUPLICATE KEY(`o_orderkey`, `o_custkey`)
|
||||
COMMENT 'OLAP'
|
||||
auto partition by range (date_trunc(`o_orderdate`, 'day')) ()
|
||||
DISTRIBUTED BY HASH(`o_orderkey`) BUCKETS 96
|
||||
PROPERTIES (
|
||||
"replication_allocation" = "tag.location.default: 1"
|
||||
);"""
|
||||
|
||||
sql """
|
||||
drop table if exists ${lineitem_tb}
|
||||
"""
|
||||
|
||||
sql """CREATE TABLE `${lineitem_tb}` (
|
||||
`l_orderkey` BIGINT NULL,
|
||||
`l_linenumber` INT NULL,
|
||||
`l_partkey` INT NULL,
|
||||
`l_suppkey` INT NULL,
|
||||
`l_quantity` DECIMAL(15, 2) NULL,
|
||||
`l_extendedprice` DECIMAL(15, 2) NULL,
|
||||
`l_discount` DECIMAL(15, 2) NULL,
|
||||
`l_tax` DECIMAL(15, 2) NULL,
|
||||
`l_returnflag` VARCHAR(1) NULL,
|
||||
`l_linestatus` VARCHAR(1) NULL,
|
||||
`l_commitdate` DATE NULL,
|
||||
`l_receiptdate` DATE NULL,
|
||||
`l_shipinstruct` VARCHAR(25) NULL,
|
||||
`l_shipmode` VARCHAR(10) NULL,
|
||||
`l_comment` VARCHAR(44) NULL,
|
||||
`l_shipdate` DATE not NULL
|
||||
) ENGINE=OLAP
|
||||
DUPLICATE KEY(l_orderkey, l_linenumber, l_partkey, l_suppkey )
|
||||
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 ${orders_tb} values
|
||||
(null, 1, 'k', 99.5, 'a', 'b', 1, 'yy', '2023-10-17'),
|
||||
(1, null, 'o', 109.2, 'c','d',2, 'mm', '2023-10-17'),
|
||||
(3, 3, null, 99.5, 'a', 'b', 1, 'yy', '2023-10-19'),
|
||||
(1, 2, 'o', null, 'a', 'b', 1, 'yy', '2023-10-20'),
|
||||
(2, 3, 'k', 109.2, null,'d',2, 'mm', '2023-10-21'),
|
||||
(3, 1, 'k', 99.5, 'a', null, 1, 'yy', '2023-10-22'),
|
||||
(1, 3, 'o', 99.5, 'a', 'b', null, 'yy', '2023-10-19'),
|
||||
(2, 1, 'o', 109.2, 'c','d',2, null, '2023-10-18'),
|
||||
(3, 2, 'k', 99.5, 'a', 'b', 1, 'yy', '2023-10-17'),
|
||||
(4, 5, 'k', 99.5, 'a', 'b', 1, 'yy', '2023-10-19');
|
||||
"""
|
||||
|
||||
sql """
|
||||
insert into ${lineitem_tb} values
|
||||
(null, 1, 2, 3, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy', '2023-10-17'),
|
||||
(1, null, 3, 1, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-18', '2023-10-18', 'a', 'b', 'yyyyyyyyy', '2023-10-17'),
|
||||
(3, 3, null, 2, 7.5, 8.5, 9.5, 10.5, 'k', 'o', '2023-10-19', '2023-10-19', 'c', 'd', 'xxxxxxxxx', '2023-10-19'),
|
||||
(1, 2, 3, null, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy', '2023-10-17'),
|
||||
(2, 3, 2, 1, 5.5, 6.5, 7.5, 8.5, 'o', 'k', null, '2023-10-18', 'a', 'b', 'yyyyyyyyy', '2023-10-18'),
|
||||
(3, 1, 1, 2, 7.5, 8.5, 9.5, 10.5, 'k', 'o', '2023-10-19', null, 'c', 'd', 'xxxxxxxxx', '2023-10-19'),
|
||||
(1, 3, 2, 2, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy', '2023-10-17');
|
||||
"""
|
||||
|
||||
sql """analyze table ${orders_tb} with sync;"""
|
||||
sql """analyze table ${lineitem_tb} with sync;"""
|
||||
|
||||
String mtmv_sql = """select l_Shipdate, o_Orderdate, l_partkey, l_suppkey
|
||||
from ${lineitem_tb}
|
||||
left join ${orders_tb}
|
||||
on ${lineitem_tb}.l_orderkey = ${orders_tb}.o_orderkey"""
|
||||
|
||||
sql """DROP MATERIALIZED VIEW IF EXISTS ${mtmv_name};"""
|
||||
sql """DROP TABLE IF EXISTS ${mtmv_name}"""
|
||||
sql"""
|
||||
CREATE MATERIALIZED VIEW ${mtmv_name}
|
||||
BUILD IMMEDIATE REFRESH AUTO ON MANUAL
|
||||
partition by(l_shipdate)
|
||||
DISTRIBUTED BY RANDOM BUCKETS 2
|
||||
PROPERTIES ('replication_num' = '1')
|
||||
AS
|
||||
${mtmv_sql}
|
||||
"""
|
||||
|
||||
def job_name = getJobName(db, mtmv_name)
|
||||
waitingMTMVTaskFinishedByMvName(mtmv_name)
|
||||
|
||||
}
|
||||
@ -0,0 +1,141 @@
|
||||
// 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_upgrade_downgrade_compatibility_mtmv","p0,mtmv,restart_fe") {
|
||||
|
||||
String db = context.config.getDbNameByFile(context.file)
|
||||
String orders_tb = "up_down_mtmv_orders"
|
||||
String lineitem_tb = "up_down_mtmv_lineitem"
|
||||
String mtmv_name = "up_down_mtmv_test_mv"
|
||||
|
||||
def compare_res = { def stmt ->
|
||||
sql "SET enable_materialized_view_rewrite=false"
|
||||
def origin_res = sql stmt
|
||||
logger.info("origin_res: " + origin_res)
|
||||
sql "SET enable_materialized_view_rewrite=true"
|
||||
def mv_origin_res = sql stmt
|
||||
logger.info("mv_origin_res: " + mv_origin_res)
|
||||
assertTrue((mv_origin_res == [] && origin_res == []) || (mv_origin_res.size() == origin_res.size()))
|
||||
for (int row = 0; row < mv_origin_res.size(); row++) {
|
||||
assertTrue(mv_origin_res[row].size() == origin_res[row].size())
|
||||
for (int col = 0; col < mv_origin_res[row].size(); col++) {
|
||||
assertTrue(mv_origin_res[row][col] == origin_res[row][col])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String mtmv_sql = """select l_Shipdate, o_Orderdate, l_partkey, l_suppkey
|
||||
from ${lineitem_tb}
|
||||
left join ${orders_tb}
|
||||
on ${lineitem_tb}.l_orderkey = ${orders_tb}.o_orderkey"""
|
||||
|
||||
def select_count1 = sql """select count(*) from ${mtmv_name}"""
|
||||
logger.info("select_count1: " + select_count1)
|
||||
|
||||
explain {
|
||||
sql("${mtmv_sql}")
|
||||
contains "${mtmv_name}(${mtmv_name})"
|
||||
}
|
||||
compare_res(mtmv_sql + " order by 1,2,3,4")
|
||||
|
||||
sql """
|
||||
insert into ${orders_tb} values
|
||||
(null, 1, 'k', 99.5, 'a', 'b', 1, 'yy', '2023-10-17'),
|
||||
(6, null, 'o', 109.2, 'c','d',2, 'mm', '2023-10-17'),
|
||||
(6, 3, null, 99.5, 'a', 'b', 1, 'yy', '2023-10-19'),
|
||||
(6, 2, 'o', null, 'a', 'b', 1, 'yy', '2023-10-20');
|
||||
"""
|
||||
|
||||
sql """
|
||||
insert into ${lineitem_tb} values
|
||||
(null, 1, 2, 3, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy', '2023-10-17'),
|
||||
(6, null, 3, 1, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-18', '2023-10-18', 'a', 'b', 'yyyyyyyyy', '2023-10-17'),
|
||||
(6, 3, null, 2, 7.5, 8.5, 9.5, 10.5, 'k', 'o', '2023-10-19', '2023-10-19', 'c', 'd', 'xxxxxxxxx', '2023-10-19'),
|
||||
(6, 2, 3, null, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy', '2023-10-17');
|
||||
"""
|
||||
|
||||
sql """refresh MATERIALIZED VIEW ${mtmv_name} auto;"""
|
||||
|
||||
// insert and refresh mtmv
|
||||
def job_name = getJobName(db, mtmv_name)
|
||||
waitingMTMVTaskFinishedByMvName(mtmv_name)
|
||||
def select_count2 = sql """select count(*) from ${mtmv_name}"""
|
||||
logger.info("select_count2: " + select_count2)
|
||||
assertTrue(select_count2[0][0] != select_count1[0][0])
|
||||
|
||||
explain {
|
||||
sql("${mtmv_sql}")
|
||||
contains "${mtmv_name}(${mtmv_name})"
|
||||
}
|
||||
compare_res(mtmv_sql + " order by 1,2,3,4")
|
||||
|
||||
// pause
|
||||
def job_status = sql """select * from jobs("type"="mv") where Name="${job_name}";"""
|
||||
assertTrue(job_status[0][8] == "RUNNING")
|
||||
sql """PAUSE MATERIALIZED VIEW JOB ON ${mtmv_name};"""
|
||||
job_status = sql """select * from jobs("type"="mv") where Name="${job_name}";"""
|
||||
assertTrue(job_status[0][8] == "PAUSED")
|
||||
|
||||
explain {
|
||||
sql("${mtmv_sql}")
|
||||
contains "${mtmv_name}(${mtmv_name})"
|
||||
}
|
||||
compare_res(mtmv_sql + " order by 1,2,3,4")
|
||||
|
||||
// resume
|
||||
sql """RESUME MATERIALIZED VIEW JOB ON ${mtmv_name};"""
|
||||
job_status = sql """select * from jobs("type"="mv") where Name="${job_name}";"""
|
||||
assertTrue(job_status[0][8] == "RUNNING")
|
||||
|
||||
explain {
|
||||
sql("${mtmv_sql}")
|
||||
contains "${mtmv_name}(${mtmv_name})"
|
||||
}
|
||||
compare_res(mtmv_sql + " order by 1,2,3,4")
|
||||
|
||||
// drop
|
||||
sql """DROP MATERIALIZED VIEW IF EXISTS ${mtmv_name};"""
|
||||
sql """DROP TABLE IF EXISTS ${mtmv_name}"""
|
||||
test {
|
||||
sql """select count(*) from ${mtmv_name}"""
|
||||
exception "Unknown table"
|
||||
}
|
||||
|
||||
// create
|
||||
sql"""
|
||||
CREATE MATERIALIZED VIEW ${mtmv_name}
|
||||
BUILD IMMEDIATE REFRESH AUTO ON MANUAL
|
||||
partition by(l_shipdate)
|
||||
DISTRIBUTED BY RANDOM BUCKETS 2
|
||||
PROPERTIES ('replication_num' = '1')
|
||||
AS
|
||||
${mtmv_sql}
|
||||
"""
|
||||
|
||||
job_name = getJobName(db, mtmv_name)
|
||||
waitingMTMVTaskFinishedByMvName(mtmv_name)
|
||||
|
||||
def select_count3 = sql """select count(*) from ${mtmv_name}"""
|
||||
logger.info("select_count3: " + select_count3)
|
||||
assertTrue(select_count3[0][0] == select_count2[0][0])
|
||||
|
||||
explain {
|
||||
sql("${mtmv_sql}")
|
||||
contains "${mtmv_name}(${mtmv_name})"
|
||||
}
|
||||
compare_res(mtmv_sql + " order by 1,2,3,4")
|
||||
}
|
||||
Reference in New Issue
Block a user