[Bug](storage )fix dead lock when create_tablet need lock two tablet && update mv_p0… (#21969)
fix dead lock when create_tablet need lock two tablet && update mv_p0/ssb case
This commit is contained in:
@ -244,7 +244,18 @@ Status TabletManager::create_tablet(const TCreateTabletReq& request, std::vector
|
||||
int64_t tablet_id = request.tablet_id;
|
||||
LOG(INFO) << "begin to create tablet. tablet_id=" << tablet_id;
|
||||
|
||||
std::lock_guard<std::shared_mutex> wrlock(_get_tablets_shard_lock(tablet_id));
|
||||
// when we create rollup tablet A(assume on shard-1) from tablet B(assume on shard-2)
|
||||
// we need use write lock on shard-1 and then use read lock on shard-2
|
||||
// if there have create rollup tablet C(assume on shard-2) from tablet D(assume on shard-1) at the same time, we will meet deadlock
|
||||
std::unique_lock two_tablet_lock(_two_tablet_mtx, std::defer_lock);
|
||||
bool is_schema_change = request.__isset.base_tablet_id && request.base_tablet_id > 0;
|
||||
bool need_two_lock = is_schema_change && ((_tablets_shards_mask & request.base_tablet_id) !=
|
||||
(_tablets_shards_mask & tablet_id));
|
||||
if (need_two_lock) {
|
||||
two_tablet_lock.lock();
|
||||
}
|
||||
|
||||
std::lock_guard wrlock(_get_tablets_shard_lock(tablet_id));
|
||||
// Make create_tablet operation to be idempotent:
|
||||
// 1. Return true if tablet with same tablet_id and schema_hash exist;
|
||||
// false if tablet with same tablet_id but different schema_hash exist.
|
||||
@ -258,13 +269,12 @@ Status TabletManager::create_tablet(const TCreateTabletReq& request, std::vector
|
||||
}
|
||||
|
||||
TabletSharedPtr base_tablet = nullptr;
|
||||
bool is_schema_change = false;
|
||||
// If the CreateTabletReq has base_tablet_id then it is a alter-tablet request
|
||||
if (request.__isset.base_tablet_id && request.base_tablet_id > 0) {
|
||||
is_schema_change = true;
|
||||
if (is_schema_change) {
|
||||
// if base_tablet_id's lock diffrent with new_tablet_id, we need lock it.
|
||||
if ((_tablets_shards_mask & request.base_tablet_id) != (_tablets_shards_mask & tablet_id)) {
|
||||
if (need_two_lock) {
|
||||
base_tablet = get_tablet(request.base_tablet_id);
|
||||
two_tablet_lock.unlock();
|
||||
} else {
|
||||
base_tablet = _get_tablet_unlocked(request.base_tablet_id);
|
||||
}
|
||||
@ -550,9 +560,8 @@ std::pair<TabletSharedPtr, Status> TabletManager::get_tablet_and_status(TTabletI
|
||||
std::string err;
|
||||
auto tablet = get_tablet(tablet_id, include_deleted, &err);
|
||||
if (tablet == nullptr) {
|
||||
auto err_str = fmt::format("failed to get tablet: {}, reason: {}", tablet_id, err);
|
||||
LOG(WARNING) << err_str;
|
||||
return {tablet, Status::InternalError(err_str)};
|
||||
return {tablet,
|
||||
Status::InternalError("failed to get tablet: {}, reason: {}", tablet_id, err)};
|
||||
}
|
||||
|
||||
return {tablet, Status::OK()};
|
||||
|
||||
@ -250,6 +250,8 @@ private:
|
||||
tablet_map_t& _get_tablet_map(TTabletId tablet_id);
|
||||
|
||||
tablets_shard& _get_tablets_shard(TTabletId tabletId);
|
||||
|
||||
std::mutex _two_tablet_mtx;
|
||||
};
|
||||
|
||||
} // namespace doris
|
||||
|
||||
@ -97,15 +97,14 @@ class TExpr;
|
||||
|
||||
namespace stream_load {
|
||||
|
||||
IndexChannel::~IndexChannel() {}
|
||||
IndexChannel::~IndexChannel() = default;
|
||||
|
||||
Status IndexChannel::init(RuntimeState* state, const std::vector<TTabletWithPartition>& tablets) {
|
||||
SCOPED_CONSUME_MEM_TRACKER(_index_channel_tracker.get());
|
||||
for (auto& tablet : tablets) {
|
||||
auto location = _parent->_location->find_tablet(tablet.tablet_id);
|
||||
if (location == nullptr) {
|
||||
LOG(WARNING) << "unknown tablet, tablet_id=" << tablet.tablet_id;
|
||||
return Status::InternalError("unknown tablet");
|
||||
return Status::InternalError("unknown tablet, tablet_id={}", tablet.tablet_id);
|
||||
}
|
||||
std::vector<std::shared_ptr<VNodeChannel>> channels;
|
||||
for (auto& node_id : location->node_ids) {
|
||||
@ -209,14 +208,12 @@ Status IndexChannel::check_tablet_received_rows_consistency() {
|
||||
continue;
|
||||
}
|
||||
if (tablet.second[i].second != tablet.second[0].second) {
|
||||
LOG(WARNING) << "rows num doest't match, load_id: " << _parent->_load_id
|
||||
<< ", txn_id: " << std::to_string(_parent->_txn_id)
|
||||
<< ", tablt_id: " << tablet.first
|
||||
<< ", node_id: " << tablet.second[i].first
|
||||
<< ", rows_num: " << tablet.second[i].second
|
||||
<< ", node_id: " << tablet.second[0].first
|
||||
<< ", rows_num: " << tablet.second[0].second;
|
||||
return Status::InternalError("rows num written by multi replicas doest't match");
|
||||
return Status::InternalError(
|
||||
"rows num written by multi replicas doest't match, load_id={}, txn_id={}, "
|
||||
"tablt_id={}, node_id={}, rows_num={}, node_id={}, rows_num={}",
|
||||
print_id(_parent->_load_id), _parent->_txn_id, tablet.first,
|
||||
tablet.second[i].first, tablet.second[i].second, tablet.second[0].first,
|
||||
tablet.second[0].second);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -278,10 +275,9 @@ Status VNodeChannel::init(RuntimeState* state) {
|
||||
_stub = state->exec_env()->brpc_internal_client_cache()->get_client(_node_info.host,
|
||||
_node_info.brpc_port);
|
||||
if (_stub == nullptr) {
|
||||
LOG(WARNING) << "Get rpc stub failed, host=" << _node_info.host
|
||||
<< ", port=" << _node_info.brpc_port << ", " << channel_info();
|
||||
_cancelled = true;
|
||||
return Status::InternalError("get rpc stub failed");
|
||||
return Status::InternalError("Get rpc stub failed, host={}, port={}, info={}",
|
||||
_node_info.host, _node_info.brpc_port, channel_info());
|
||||
}
|
||||
|
||||
_rpc_timeout_ms = state->execution_timeout() * 1000;
|
||||
@ -351,19 +347,17 @@ Status VNodeChannel::open_wait() {
|
||||
ExecEnv::GetInstance()->brpc_internal_client_cache()->erase(
|
||||
_open_closure->cntl.remote_side());
|
||||
}
|
||||
std::stringstream ss;
|
||||
ss << "failed to open tablet writer, error=" << berror(_open_closure->cntl.ErrorCode())
|
||||
<< ", error_text=" << _open_closure->cntl.ErrorText();
|
||||
|
||||
_cancelled = true;
|
||||
LOG(WARNING) << ss.str() << " " << channel_info();
|
||||
auto error_code = _open_closure->cntl.ErrorCode();
|
||||
auto error_text = _open_closure->cntl.ErrorText();
|
||||
if (_open_closure->unref()) {
|
||||
delete _open_closure;
|
||||
}
|
||||
_open_closure = nullptr;
|
||||
return Status::InternalError("failed to open tablet writer, error={}, error_text={}",
|
||||
berror(error_code), error_text);
|
||||
return Status::InternalError(
|
||||
"failed to open tablet writer, error={}, error_text={}, info={}",
|
||||
berror(error_code), error_text, channel_info());
|
||||
}
|
||||
Status status(Status::create(_open_closure->result.status()));
|
||||
if (_open_closure->unref()) {
|
||||
|
||||
@ -15,10 +15,10 @@
|
||||
-- !select_q_2_1 --
|
||||
1 1993 brand
|
||||
|
||||
-- !select_mv --
|
||||
-- !select_q_3_1 --
|
||||
ASIA ASIA 1992 1
|
||||
|
||||
-- !select_mv --
|
||||
-- !select_q_4_1 --
|
||||
0 nation 0
|
||||
1993 nation 0
|
||||
|
||||
|
||||
24
regression-test/data/mv_p0/ssb/multiple_ssb/multiple_ssb.out
Normal file
24
regression-test/data/mv_p0/ssb/multiple_ssb/multiple_ssb.out
Normal file
@ -0,0 +1,24 @@
|
||||
-- This file is automatically generated. You should know what you did if you want to edit this
|
||||
-- !select_star --
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2023-06-09 shipmode name address city nation AMERICA phone mktsegment name address city nation AMERICA phone name MFGR#1 category brand color type 4 container
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2023-06-09 shipmode name address city nation region phone mktsegment name address city nation region phone name mfgr category brand color type 4 container
|
||||
19920101 1 1 1 1 1 1 1 1 1 1 100 1 1 1 2023-06-09 ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA MFGR#12 MFGR#12 brand color type 4 container
|
||||
19930101 1 1 1 1 1 1 1 1 1 1 100 1 1 1 2023-06-09 shipmode name address city nation AMERICA phone mktsegment name address city nation AMERICA phone name MFGR#1 category brand color type 4 container
|
||||
19930101 1 1 1 1 1 1 1 1 1 1 100 1 1 1 2023-06-09 shipmode name address city nation AMERICA phone mktsegment name address city nation AMERICA phone name MFGR#12 MFGR#12 brand color type 4 container
|
||||
19930101 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2023-06-09 shipmode name address city nation region phone mktsegment name address city nation region phone name mfgr category brand color type 4 container
|
||||
19930101 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2023-06-09 shipmode name address city nation region phone mktsegment name address city nation region phone name mfgr category brand color type 4 container
|
||||
19930101 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2023-06-09 shipmode name address city nation region phone mktsegment name address city nation region phone name mfgr category brand color type 4 container
|
||||
|
||||
-- !select_q_1_1 --
|
||||
12
|
||||
|
||||
-- !select_q_2_1 --
|
||||
1 1993 brand
|
||||
|
||||
-- !select_q_3_1 --
|
||||
ASIA ASIA 1992 1
|
||||
|
||||
-- !select_q_4_1 --
|
||||
0 nation 0
|
||||
1993 nation 0
|
||||
|
||||
15
regression-test/data/mv_p0/ssb/q_4_1_r1/q_4_1_r1.out
Normal file
15
regression-test/data/mv_p0/ssb/q_4_1_r1/q_4_1_r1.out
Normal file
@ -0,0 +1,15 @@
|
||||
-- This file is automatically generated. You should know what you did if you want to edit this
|
||||
-- !select_star --
|
||||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2023-06-09 shipmode name address city nation AMERICA phone mktsegment name address city nation AMERICA phone name MFGR#1 category brand color type 4 container
|
||||
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2023-06-09 shipmode name address city nation region phone mktsegment name address city nation region phone name mfgr category brand color type 4 container
|
||||
19920101 1 1 1 1 1 1 1 1 1 1 100 1 1 1 2023-06-09 ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA ASIA MFGR#12 MFGR#12 brand color type 4 container
|
||||
19930101 1 1 1 1 1 1 1 1 1 1 100 1 1 1 2023-06-09 shipmode name address city nation AMERICA phone mktsegment name address city nation AMERICA phone name MFGR#1 category brand color type 4 container
|
||||
19930101 1 1 1 1 1 1 1 1 1 1 100 1 1 1 2023-06-09 shipmode name address city nation AMERICA phone mktsegment name address city nation AMERICA phone name MFGR#12 MFGR#12 brand color type 4 container
|
||||
19930101 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2023-06-09 shipmode name address city nation region phone mktsegment name address city nation region phone name mfgr category brand color type 4 container
|
||||
19930101 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2023-06-09 shipmode name address city nation region phone mktsegment name address city nation region phone name mfgr category brand color type 4 container
|
||||
19930101 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2023-06-09 shipmode name address city nation region phone mktsegment name address city nation region phone name mfgr category brand color type 4 container
|
||||
|
||||
-- !select_mv --
|
||||
0 nation 0
|
||||
1993 nation 0
|
||||
|
||||
@ -64,7 +64,7 @@ class CreateMVAction implements SuiteAction {
|
||||
sqlResult = tmp.result[0]
|
||||
log.info("result: ${sqlResult}".toString())
|
||||
if (tryTimes == 60 || sqlResult.contains("CANCELLED")) {
|
||||
throw new IllegalStateException("MV create check times over limit");
|
||||
throw new IllegalStateException("MV create check times over limit, result='${sqlResult}'");
|
||||
}
|
||||
Thread.sleep(1200)
|
||||
tryTimes++
|
||||
|
||||
@ -187,7 +187,7 @@ suite ("multiple_no_where") {
|
||||
ORDER BY YEAR ASC, revenue DESC;""")
|
||||
contains "(lineorder_q_3_1)"
|
||||
}
|
||||
qt_select_mv """SELECT
|
||||
qt_select_q_3_1 """SELECT
|
||||
C_NATION,
|
||||
S_NATION, (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
SUM(LO_REVENUE) AS revenue
|
||||
@ -213,7 +213,7 @@ suite ("multiple_no_where") {
|
||||
ORDER BY YEAR ASC, C_NATION ASC;""")
|
||||
contains "(lineorder_q_4_1)"
|
||||
}
|
||||
qt_select_mv """SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
qt_select_q_4_1 """SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
C_NATION,
|
||||
SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||
FROM lineorder_flat
|
||||
|
||||
@ -0,0 +1,244 @@
|
||||
// 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 ("multiple_ssb") {
|
||||
sql """ DROP TABLE IF EXISTS lineorder_flat; """
|
||||
sql """set enable_nereids_planner=true"""
|
||||
sql """SET enable_fallback_to_original_planner=false"""
|
||||
|
||||
sql """
|
||||
CREATE TABLE IF NOT EXISTS `lineorder_flat` (
|
||||
`LO_ORDERDATE` int(11) 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
|
||||
DUPLICATE KEY(`LO_ORDERDATE`, `LO_ORDERKEY`)
|
||||
COMMENT "OLAP"
|
||||
PARTITION BY RANGE(`LO_ORDERDATE`)
|
||||
(PARTITION p1992 VALUES [("-2147483648"), ("19930101")),
|
||||
PARTITION p1993 VALUES [("19930101"), ("19940101")),
|
||||
PARTITION p1994 VALUES [("19940101"), ("19950101")),
|
||||
PARTITION p1995 VALUES [("19950101"), ("19960101")),
|
||||
PARTITION p1996 VALUES [("19960101"), ("19970101")),
|
||||
PARTITION p1997 VALUES [("19970101"), ("19980101")),
|
||||
PARTITION p1998 VALUES [("19980101"), ("19990101")))
|
||||
DISTRIBUTED BY HASH(`LO_ORDERKEY`) BUCKETS 48
|
||||
PROPERTIES (
|
||||
"replication_num" = "1",
|
||||
"colocate_with" = "groupxx1",
|
||||
"in_memory" = "false",
|
||||
"storage_format" = "DEFAULT"
|
||||
);
|
||||
"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19930101 , 1 , 1 , 1 , 1 , 1 , '1' , 1 , 1 , 1 , 1 , 100 , 1 , 1 , 1 , '2023-06-09' , 'shipmode' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' , 'phone' , 'mktsegment' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' ,'phone', 'name', 'MFGR#1', 'category', 'brand', 'color', 'type', 4 ,'container');"""
|
||||
|
||||
test {
|
||||
sql """create materialized view lineorder_q_1_1 as
|
||||
SELECT LO_ORDERKEY, SUM(LO_EXTENDEDPRICE * LO_DISCOUNT)
|
||||
FROM lineorder_flat GROUP BY
|
||||
LO_ORDERKEY, LO_ORDERDATE, LO_DISCOUNT, LO_QUANTITY;"""
|
||||
exception "not in select list"
|
||||
}
|
||||
|
||||
createMV ("""create materialized view lineorder_q_1_1 as
|
||||
SELECT LO_ORDERKEY, SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
|
||||
FROM lineorder_flat
|
||||
WHERE
|
||||
LO_ORDERDATE >= 19930101
|
||||
AND LO_ORDERDATE <= 19931231
|
||||
AND LO_DISCOUNT >= 1 AND LO_DISCOUNT <= 3
|
||||
AND LO_QUANTITY < 25
|
||||
GROUP BY
|
||||
LO_ORDERKEY;""")
|
||||
|
||||
createMV ("""create materialized view lineorder_q_2_1 as
|
||||
SELECT
|
||||
(LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
P_BRAND,
|
||||
SUM(LO_REVENUE)
|
||||
FROM lineorder_flat
|
||||
WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA'
|
||||
GROUP BY YEAR, P_BRAND
|
||||
ORDER BY YEAR, P_BRAND;""")
|
||||
|
||||
createMV ("""create materialized view lineorder_q_3_1 as
|
||||
SELECT
|
||||
C_NATION,
|
||||
S_NATION, (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
SUM(LO_REVENUE) AS revenue
|
||||
FROM lineorder_flat
|
||||
WHERE
|
||||
C_REGION = 'ASIA'
|
||||
AND S_REGION = 'ASIA'
|
||||
AND LO_ORDERDATE >= 19920101
|
||||
AND LO_ORDERDATE <= 19971231
|
||||
GROUP BY C_NATION, S_NATION, YEAR;""")
|
||||
|
||||
createMV ("""create materialized view lineorder_q_4_1 as
|
||||
SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
C_NATION,
|
||||
SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||
FROM lineorder_flat
|
||||
WHERE
|
||||
C_REGION = 'AMERICA'
|
||||
AND S_REGION = 'AMERICA'
|
||||
AND P_MFGR IN ('MFGR#1', 'MFGR#2')
|
||||
GROUP BY YEAR, C_NATION
|
||||
ORDER BY YEAR ASC, C_NATION ASC;""")
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19930101 , 2 , 2 , 2 , 2 , 2 ,'2',2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,'2023-06-09','shipmode','name','address','city','nation','region','phone','mktsegment','name','address','city','nation','region','phone','name','mfgr','category','brand','color','type',4,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19930101 , 1 , 1 , 1 , 1 , 1 , '1' , 1 , 1 , 1 , 1 , 100 , 1 , 1 , 1 , '2023-06-09' , 'shipmode' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' , 'phone' , 'mktsegment' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' ,'phone', 'name', 'MFGR#12', 'MFGR#12', 'brand', 'color', 'type', 4 ,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19930101 , 2 , 2 , 2 , 2 , 2 ,'2',2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,'2023-06-09','shipmode','name','address','city','nation','region','phone','mktsegment','name','address','city','nation','region','phone','name','mfgr','category','brand','color','type',4,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19920101 , 1 , 1 , 1 , 1 , 1 , '1' , 1 , 1 , 1 , 1 , 100 , 1 , 1 , 1 , '2023-06-09' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' ,'ASIA', 'ASIA', 'MFGR#12', 'MFGR#12', 'brand', 'color', 'type', 4 ,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19930101 , 2 , 2 , 2 , 2 , 2 ,'2',2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,'2023-06-09','shipmode','name','address','city','nation','region','phone','mktsegment','name','address','city','nation','region','phone','name','mfgr','category','brand','color','type',4,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (2 , 2 , 2 , 2 , 2 , 2 ,'2',2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,'2023-06-09','shipmode','name','address','city','nation','region','phone','mktsegment','name','address','city','nation','region','phone','name','mfgr','category','brand','color','type',4,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (1 , 1 , 1 , 1 , 1 , 1 , '1' , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , '2023-06-09' , 'shipmode' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' , 'phone' , 'mktsegment' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' ,'phone', 'name', 'MFGR#1', 'category', 'brand', 'color', 'type', 4 ,'container');"""
|
||||
|
||||
qt_select_star "select * from lineorder_flat order by 1,2;"
|
||||
|
||||
explain {
|
||||
sql("""SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
|
||||
FROM lineorder_flat
|
||||
WHERE
|
||||
LO_ORDERDATE >= 19930101
|
||||
AND LO_ORDERDATE <= 19931231
|
||||
AND LO_DISCOUNT >= 1 AND LO_DISCOUNT <= 3
|
||||
AND LO_QUANTITY < 25;""")
|
||||
contains "(lineorder_q_1_1)"
|
||||
}
|
||||
qt_select_q_1_1 """SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
|
||||
FROM lineorder_flat
|
||||
WHERE
|
||||
LO_ORDERDATE >= 19930101
|
||||
AND LO_ORDERDATE <= 19931231
|
||||
AND LO_DISCOUNT >= 1 AND LO_DISCOUNT <= 3
|
||||
AND LO_QUANTITY < 25;"""
|
||||
|
||||
explain {
|
||||
sql("""SELECT
|
||||
SUM(LO_REVENUE), (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
P_BRAND
|
||||
FROM lineorder_flat
|
||||
WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA'
|
||||
GROUP BY (LO_ORDERDATE DIV 10000), P_BRAND
|
||||
ORDER BY YEAR, P_BRAND;""")
|
||||
contains "(lineorder_q_2_1)"
|
||||
}
|
||||
qt_select_q_2_1 """SELECT
|
||||
SUM(LO_REVENUE), (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
P_BRAND
|
||||
FROM lineorder_flat
|
||||
WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA'
|
||||
GROUP BY YEAR, P_BRAND
|
||||
ORDER BY YEAR, P_BRAND;"""
|
||||
|
||||
explain {
|
||||
sql("""SELECT
|
||||
C_NATION,
|
||||
S_NATION, (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
SUM(LO_REVENUE) AS revenue
|
||||
FROM lineorder_flat
|
||||
WHERE
|
||||
C_REGION = 'ASIA'
|
||||
AND S_REGION = 'ASIA'
|
||||
AND LO_ORDERDATE >= 19920101
|
||||
AND LO_ORDERDATE <= 19971231
|
||||
GROUP BY C_NATION, S_NATION, YEAR
|
||||
ORDER BY YEAR ASC, revenue DESC;""")
|
||||
contains "(lineorder_q_3_1)"
|
||||
}
|
||||
qt_select_q_3_1 """SELECT
|
||||
C_NATION,
|
||||
S_NATION, (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
SUM(LO_REVENUE) AS revenue
|
||||
FROM lineorder_flat
|
||||
WHERE
|
||||
C_REGION = 'ASIA'
|
||||
AND S_REGION = 'ASIA'
|
||||
AND LO_ORDERDATE >= 19920101
|
||||
AND LO_ORDERDATE <= 19971231
|
||||
GROUP BY C_NATION, S_NATION, YEAR
|
||||
ORDER BY YEAR ASC, revenue DESC;"""
|
||||
|
||||
explain {
|
||||
sql("""SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
C_NATION,
|
||||
SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||
FROM lineorder_flat
|
||||
WHERE
|
||||
C_REGION = 'AMERICA'
|
||||
AND S_REGION = 'AMERICA'
|
||||
AND P_MFGR IN ('MFGR#1', 'MFGR#2')
|
||||
GROUP BY YEAR, C_NATION
|
||||
ORDER BY YEAR ASC, C_NATION ASC;""")
|
||||
contains "(lineorder_q_4_1)"
|
||||
}
|
||||
qt_select_q_4_1 """SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
C_NATION,
|
||||
SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||
FROM lineorder_flat
|
||||
WHERE
|
||||
C_REGION = 'AMERICA'
|
||||
AND S_REGION = 'AMERICA'
|
||||
AND P_MFGR IN ('MFGR#1', 'MFGR#2')
|
||||
GROUP BY YEAR, C_NATION
|
||||
ORDER BY YEAR ASC, C_NATION ASC;"""
|
||||
}
|
||||
129
regression-test/suites/mv_p0/ssb/q_4_1_r1/q_4_1_r1.groovy
Normal file
129
regression-test/suites/mv_p0/ssb/q_4_1_r1/q_4_1_r1.groovy
Normal file
@ -0,0 +1,129 @@
|
||||
// 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 ("q_4_1_r1") {
|
||||
sql """ DROP TABLE IF EXISTS lineorder_flat; """
|
||||
sql """set enable_nereids_planner=true"""
|
||||
sql """SET enable_fallback_to_original_planner=false"""
|
||||
|
||||
sql """
|
||||
CREATE TABLE IF NOT EXISTS `lineorder_flat` (
|
||||
`LO_ORDERDATE` int(11) 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
|
||||
DUPLICATE KEY(`LO_ORDERDATE`, `LO_ORDERKEY`)
|
||||
COMMENT "OLAP"
|
||||
PARTITION BY RANGE(`LO_ORDERDATE`)
|
||||
(PARTITION p1992 VALUES [("-2147483648"), ("19930101")),
|
||||
PARTITION p1993 VALUES [("19930101"), ("19940101")),
|
||||
PARTITION p1994 VALUES [("19940101"), ("19950101")),
|
||||
PARTITION p1995 VALUES [("19950101"), ("19960101")),
|
||||
PARTITION p1996 VALUES [("19960101"), ("19970101")),
|
||||
PARTITION p1997 VALUES [("19970101"), ("19980101")),
|
||||
PARTITION p1998 VALUES [("19980101"), ("19990101")))
|
||||
DISTRIBUTED BY HASH(`LO_ORDERKEY`) BUCKETS 48
|
||||
PROPERTIES (
|
||||
"replication_num" = "1",
|
||||
"colocate_with" = "groupxx1",
|
||||
"in_memory" = "false",
|
||||
"storage_format" = "DEFAULT"
|
||||
);
|
||||
"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19930101 , 1 , 1 , 1 , 1 , 1 , '1' , 1 , 1 , 1 , 1 , 100 , 1 , 1 , 1 , '2023-06-09' , 'shipmode' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' , 'phone' , 'mktsegment' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' ,'phone', 'name', 'MFGR#1', 'category', 'brand', 'color', 'type', 4 ,'container');"""
|
||||
|
||||
createMV ("""create materialized view lineorder_mv as select LO_ORDERDATE DIV 10000, C_NATION, C_REGION, S_REGION, P_MFGR, SUM(LO_REVENUE - LO_SUPPLYCOST) from lineorder_flat group by LO_ORDERDATE DIV 10000, C_NATION, C_REGION, S_REGION, P_MFGR;""")
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19930101 , 2 , 2 , 2 , 2 , 2 ,'2',2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,'2023-06-09','shipmode','name','address','city','nation','region','phone','mktsegment','name','address','city','nation','region','phone','name','mfgr','category','brand','color','type',4,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19930101 , 1 , 1 , 1 , 1 , 1 , '1' , 1 , 1 , 1 , 1 , 100 , 1 , 1 , 1 , '2023-06-09' , 'shipmode' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' , 'phone' , 'mktsegment' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' ,'phone', 'name', 'MFGR#12', 'MFGR#12', 'brand', 'color', 'type', 4 ,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19930101 , 2 , 2 , 2 , 2 , 2 ,'2',2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,'2023-06-09','shipmode','name','address','city','nation','region','phone','mktsegment','name','address','city','nation','region','phone','name','mfgr','category','brand','color','type',4,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19920101 , 1 , 1 , 1 , 1 , 1 , '1' , 1 , 1 , 1 , 1 , 100 , 1 , 1 , 1 , '2023-06-09' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' , 'ASIA' ,'ASIA', 'ASIA', 'MFGR#12', 'MFGR#12', 'brand', 'color', 'type', 4 ,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (19930101 , 2 , 2 , 2 , 2 , 2 ,'2',2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,'2023-06-09','shipmode','name','address','city','nation','region','phone','mktsegment','name','address','city','nation','region','phone','name','mfgr','category','brand','color','type',4,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (2 , 2 , 2 , 2 , 2 , 2 ,'2',2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,'2023-06-09','shipmode','name','address','city','nation','region','phone','mktsegment','name','address','city','nation','region','phone','name','mfgr','category','brand','color','type',4,'container');"""
|
||||
|
||||
sql """INSERT INTO lineorder_flat (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) VALUES (1 , 1 , 1 , 1 , 1 , 1 , '1' , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , '2023-06-09' , 'shipmode' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' , 'phone' , 'mktsegment' , 'name' , 'address' , 'city' , 'nation' , 'AMERICA' ,'phone', 'name', 'MFGR#1', 'category', 'brand', 'color', 'type', 4 ,'container');"""
|
||||
|
||||
qt_select_star "select * from lineorder_flat order by 1,2;"
|
||||
|
||||
explain {
|
||||
sql("""SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
C_NATION,
|
||||
SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||
FROM lineorder_flat
|
||||
WHERE
|
||||
C_REGION = 'AMERICA'
|
||||
AND S_REGION = 'AMERICA'
|
||||
AND P_MFGR IN ('MFGR#1', 'MFGR#2')
|
||||
GROUP BY YEAR, C_NATION
|
||||
ORDER BY YEAR ASC, C_NATION ASC;""")
|
||||
contains "(lineorder_mv)"
|
||||
}
|
||||
|
||||
qt_select_mv """SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
|
||||
C_NATION,
|
||||
SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||
FROM lineorder_flat
|
||||
WHERE
|
||||
C_REGION = 'AMERICA'
|
||||
AND S_REGION = 'AMERICA'
|
||||
AND P_MFGR IN ('MFGR#1', 'MFGR#2')
|
||||
GROUP BY YEAR, C_NATION
|
||||
ORDER BY YEAR ASC, C_NATION ASC;"""
|
||||
}
|
||||
Reference in New Issue
Block a user