[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:
zfr95
2024-08-13 17:46:26 +08:00
committed by GitHub
parent 677435cef8
commit aeffb18ba6
2 changed files with 269 additions and 0 deletions

View 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)
}

View File

@ -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")
}