This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 470e00ee8e [Bug](storage )fix dead lock when create_tablet need lock
two tablet && update mv_p0… (#21969)
470e00ee8e is described below
commit 470e00ee8e3c9820ced5f74d8a3f585d46e72330
Author: Pxl <[email protected]>
AuthorDate: Sat Jul 22 15:27:05 2023 +0800
[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
---
be/src/olap/tablet_manager.cpp | 25 +++--
be/src/olap/tablet_manager.h | 2 +
be/src/vec/sink/vtablet_sink.cpp | 34 +++---
.../ssb/multiple_no_where/multiple_no_where.out | 4 +-
.../multiple_ssb.out} | 4 +-
.../q_4_1_r1.out} | 9 --
.../doris/regression/action/CreateMVAction.groovy | 2 +-
.../ssb/multiple_no_where/multiple_no_where.groovy | 4 +-
.../multiple_ssb.groovy} | 42 +++++---
.../q_4_1_r1.groovy} | 119 ++-------------------
10 files changed, 81 insertions(+), 164 deletions(-)
diff --git a/be/src/olap/tablet_manager.cpp b/be/src/olap/tablet_manager.cpp
index 4f1c7ecf5e..8b68e62406 100644
--- a/be/src/olap/tablet_manager.cpp
+++ b/be/src/olap/tablet_manager.cpp
@@ -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()};
diff --git a/be/src/olap/tablet_manager.h b/be/src/olap/tablet_manager.h
index 0ddeb4aaac..f7f41dcef1 100644
--- a/be/src/olap/tablet_manager.h
+++ b/be/src/olap/tablet_manager.h
@@ -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
diff --git a/be/src/vec/sink/vtablet_sink.cpp b/be/src/vec/sink/vtablet_sink.cpp
index b0497a14a2..243504ff26 100644
--- a/be/src/vec/sink/vtablet_sink.cpp
+++ b/be/src/vec/sink/vtablet_sink.cpp
@@ -140,15 +140,14 @@ public:
std::atomic<bool> packet_in_flight {false};
};
-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) {
@@ -252,14 +251,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);
}
}
}
@@ -321,10 +318,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;
@@ -394,19 +390,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()) {
diff --git
a/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
b/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
index dd404cf8ed..00e05ab400 100644
--- a/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
+++ b/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
@@ -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
diff --git
a/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
b/regression-test/data/mv_p0/ssb/multiple_ssb/multiple_ssb.out
similarity index 97%
copy from regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
copy to regression-test/data/mv_p0/ssb/multiple_ssb/multiple_ssb.out
index dd404cf8ed..00e05ab400 100644
--- a/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
+++ b/regression-test/data/mv_p0/ssb/multiple_ssb/multiple_ssb.out
@@ -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
diff --git
a/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
b/regression-test/data/mv_p0/ssb/q_4_1_r1/q_4_1_r1.out
similarity index 94%
copy from regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
copy to regression-test/data/mv_p0/ssb/q_4_1_r1/q_4_1_r1.out
index dd404cf8ed..497ac655b1 100644
--- a/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
+++ b/regression-test/data/mv_p0/ssb/q_4_1_r1/q_4_1_r1.out
@@ -9,15 +9,6 @@
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_mv --
-ASIA ASIA 1992 1
-
-- !select_mv --
0 nation 0
1993 nation 0
diff --git
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/action/CreateMVAction.groovy
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/action/CreateMVAction.groovy
index 2b77a8815e..588bb2d01a 100644
---
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/action/CreateMVAction.groovy
+++
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/action/CreateMVAction.groovy
@@ -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++
diff --git
a/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
b/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
index 36f6fc634a..b92b37c5e1 100644
---
a/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
+++
b/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
@@ -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
diff --git
a/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
b/regression-test/suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy
similarity index 91%
copy from
regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
copy to regression-test/suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy
index 36f6fc634a..3a137a2a8f 100644
---
a/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
+++ b/regression-test/suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy
@@ -17,7 +17,7 @@
import org.codehaus.groovy.runtime.IOGroovyMethods
-suite ("multiple_no_where") {
+suite ("multiple_ssb") {
sql """ DROP TABLE IF EXISTS lineorder_flat; """
sql """set enable_nereids_planner=true"""
sql """SET enable_fallback_to_original_planner=false"""
@@ -93,32 +93,50 @@ suite ("multiple_no_where") {
}
createMV ("""create materialized view lineorder_q_1_1 as
- SELECT LO_ORDERKEY, LO_ORDERDATE, LO_DISCOUNT, LO_QUANTITY,
SUM(LO_EXTENDEDPRICE * LO_DISCOUNT)
- FROM lineorder_flat GROUP BY
- LO_ORDERKEY, LO_ORDERDATE, LO_DISCOUNT, LO_QUANTITY;""")
+ 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, P_CATEGORY, S_REGION,
+ P_BRAND,
SUM(LO_REVENUE)
FROM lineorder_flat
- GROUP BY YEAR, P_BRAND, P_CATEGORY,S_REGION;""")
+ 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, C_REGION,
S_REGION, LO_ORDERDATE,
+ S_NATION, (LO_ORDERDATE DIV 10000) AS YEAR,
SUM(LO_REVENUE) AS revenue
FROM lineorder_flat
- GROUP BY C_NATION, S_NATION, YEAR, C_REGION, S_REGION,
LO_ORDERDATE;""")
+ 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,C_REGION,S_REGION,P_MFGR,
+ C_NATION,
SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
FROM lineorder_flat
- GROUP BY YEAR, C_NATION,C_REGION,S_REGION,P_MFGR;""")
+ 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 , [...]
@@ -187,7 +205,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 +231,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
diff --git
a/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
b/regression-test/suites/mv_p0/ssb/q_4_1_r1/q_4_1_r1.groovy
similarity index 70%
copy from
regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
copy to regression-test/suites/mv_p0/ssb/q_4_1_r1/q_4_1_r1.groovy
index 36f6fc634a..43fa7bc7bc 100644
---
a/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
+++ b/regression-test/suites/mv_p0/ssb/q_4_1_r1/q_4_1_r1.groovy
@@ -17,7 +17,7 @@
import org.codehaus.groovy.runtime.IOGroovyMethods
-suite ("multiple_no_where") {
+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"""
@@ -84,41 +84,7 @@ suite ("multiple_no_where") {
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 [...]
- 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, LO_ORDERDATE, LO_DISCOUNT, LO_QUANTITY,
SUM(LO_EXTENDEDPRICE * LO_DISCOUNT)
- FROM lineorder_flat GROUP BY
- LO_ORDERKEY, LO_ORDERDATE, LO_DISCOUNT, LO_QUANTITY;""")
-
- createMV ("""create materialized view lineorder_q_2_1 as
- SELECT
- (LO_ORDERDATE DIV 10000) AS YEAR,
- P_BRAND, P_CATEGORY, S_REGION,
- SUM(LO_REVENUE)
- FROM lineorder_flat
- GROUP BY YEAR, P_BRAND, P_CATEGORY,S_REGION;""")
-
- createMV ("""create materialized view lineorder_q_3_1 as
- SELECT
- C_NATION,
- S_NATION, (LO_ORDERDATE DIV 10000) AS YEAR, C_REGION,
S_REGION, LO_ORDERDATE,
- SUM(LO_REVENUE) AS revenue
- FROM lineorder_flat
- GROUP BY C_NATION, S_NATION, YEAR, C_REGION, S_REGION,
LO_ORDERDATE;""")
-
- createMV ("""create materialized view lineorder_q_4_1 as
- SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
- C_NATION,C_REGION,S_REGION,P_MFGR,
- SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
- FROM lineorder_flat
- GROUP BY YEAR, C_NATION,C_REGION,S_REGION,P_MFGR;""")
+ 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 , [...]
@@ -137,82 +103,19 @@ suite ("multiple_no_where") {
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
+ sql("""SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
+ C_NATION,
+ SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
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)"
+ 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
- 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_mv """SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
C_NATION,
SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]