Skip to content

[Bug] Grouping sets cause BE Core or return wrong results #12273

@zenoyang

Description

@zenoyang

Search before asking

  • I had searched in the issues and found no similar issues.

Version

chunk

What's Wrong?

Users use grouping sets unreasonably and get wrong results.
If a column appears in both the select list and aggregate function, an error will be returned:

ERROR 1105 (HY000): errCode = 2, detailMessage = column: `LO_REVENUE` cannot both in select list and aggregate functions when using GROUPING SETS/CUBE/ROLLUP, please use union instead.

However, if there are two expressions in the select, the error will not be recognized, and the wrong result will be obtained (vectorization is not turned on), or BE Core (vectorization is turned on)

What You Expected?

Report an error directly instead of returning an incorrect result, or cause BE Core.

How to Reproduce?

SSB flat table: lineorder_flat

SELECT
    count(P_CATEGORY),
    (LO_ORDERDATE DIV 10000) AS year,
    P_BRAND
FROM lineorder_flat
WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA' and (LO_ORDERDATE DIV 10000) = 1996
GROUP BY
grouping sets ((year),(P_BRAND),(P_CATEGORY))

The above error will return: column: LO_REVENUE cannot both in select list and aggregate functions when using GROUPING SETS/CUBE/ROLLUP, please use union instead., which is expected.

SELECT
    count(P_CATEGORY) / count(P_CATEGORY),
    (LO_ORDERDATE DIV 10000) AS year,
    P_BRAND
FROM lineorder_flat
WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA' and (LO_ORDERDATE DIV 10000) = 1996
GROUP BY
grouping sets ((year),(P_BRAND),(P_CATEGORY))

The above sql, if vectorization is not enabled, returns an error result:

+-------------------------------------------+------+-----------+
| count(`P_CATEGORY`) / count(`P_CATEGORY`) | year | P_BRAND   |
+-------------------------------------------+------+-----------+
|                                      NULL | NULL | MFGR#125  |
|                                      NULL | NULL | MFGR#1239 |
|                                      NULL | NULL | MFGR#1224 |
|                                      NULL | NULL | MFGR#1215 |
|                                      NULL | NULL | MFGR#126  |
|                                      NULL | NULL | MFGR#1227 |
|                                      NULL | NULL | MFGR#1216 |
|                                         1 | NULL | NULL      |
|                                      NULL | NULL | MFGR#1232 |
|                                      NULL | 1996 | NULL      |
|                                      NULL | NULL | MFGR#1231 |
|                                      NULL | NULL | MFGR#1233 |
|                                      NULL | NULL | MFGR#1230 |
|                                      NULL | NULL | MFGR#1225 |
|                                      NULL | NULL | MFGR#1238 |
|                                      NULL | NULL | MFGR#124  |
|                                      NULL | NULL | MFGR#1214 |
|                                      NULL | NULL | MFGR#1226 |
|                                      NULL | NULL | MFGR#127  |
|                                      NULL | NULL | MFGR#1217 |
|                                      NULL | NULL | MFGR#1237 |
|                                      NULL | NULL | MFGR#1218 |
|                                      NULL | NULL | MFGR#1229 |
|                                      NULL | NULL | MFGR#1234 |
|                                      NULL | NULL | MFGR#128  |
|                                      NULL | NULL | MFGR#1240 |
|                                      NULL | NULL | MFGR#1221 |
|                                      NULL | NULL | MFGR#1210 |
|                                      NULL | NULL | MFGR#1222 |
|                                      NULL | NULL | MFGR#123  |
|                                      NULL | NULL | MFGR#1213 |
|                                      NULL | NULL | MFGR#121  |
|                                      NULL | NULL | MFGR#1220 |
|                                      NULL | NULL | MFGR#1211 |
|                                      NULL | NULL | MFGR#122  |
|                                      NULL | NULL | MFGR#1223 |
|                                      NULL | NULL | MFGR#1212 |
|                                      NULL | NULL | MFGR#1236 |
|                                      NULL | NULL | MFGR#1219 |
|                                      NULL | NULL | MFGR#129  |
|                                      NULL | NULL | MFGR#1235 |
|                                      NULL | NULL | MFGR#1228 |
+-------------------------------------------+------+-----------+
42 rows in set (2 min 43.05 sec)

If vectorization is turned on, it results in BE Core:

*** Current BE git commitID: 0c5b4ec ***
*** SIGABRT unkown detail explain (@0x2d290) received by PID 184976 (TID 0x7fe984d78700) from PID 184976; stack trace: ***
 0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, siginfo_t*, void*) at /root/yangzheng13/workspace/incubator-doris/be/src/common/signal_handler.h:420
 1# 0x00007FE9C9CAD400 in /lib64/libc.so.6
 2# gsignal in /lib64/libc.so.6
 3# abort in /lib64/libc.so.6
 4# __gnu_cxx::__verbose_terminate_handler() [clone .cold] in /root/yangzheng13/workspace/incubator-doris/output/be-release/lib/doris_be
 5# __cxxabiv1::__terminate(void (*)()) in /root/yangzheng13/workspace/incubator-doris/output/be-release/lib/doris_be
 6# 0x00007FE9D4020391 in /root/yangzheng13/workspace/incubator-doris/output/be-release/lib/doris_be
 7# 0x00007FE9D40204E5 in /root/yangzheng13/workspace/incubator-doris/output/be-release/lib/doris_be
 8# doris::vectorized::throwFromErrno(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int) at /root/yangzheng13/workspace/incubator-doris/be/src/vec/common/exception.cpp:115
 9# Allocator<false, false>::alloc(unsigned long, unsigned long) [clone .isra.0] at /root/yangzheng13/workspace/incubator-doris/be/src/vec/common/allocator.h:170
10# void doris::vectorized::PODArrayBase<1ul, 4096ul, Allocator<false, false>, 15ul, 16ul>::realloc<>(unsigned long) at /root/yangzheng13/workspace/incubator-doris/be/src/vec/common/pod_array.h:153
11# doris::vectorized::ColumnString::insert_range_from(doris::vectorized::IColumn const&, unsigned long, unsigned long) [clone .part.0] at /root/yangzheng13/workspace/incubator-doris/be/src/vec/columns/column_string.cpp:79
12# doris::vectorized::VRepeatNode::get_repeated_block(doris::vectorized::Block*, int, doris::vectorized::Block*) at /root/yangzheng13/workspace/incubator-doris/be/src/vec/exec/vrepeat_node.cpp:114
13# doris::vectorized::VRepeatNode::get_next(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /root/yangzheng13/workspace/incubator-doris/be/src/vec/exec/vrepeat_node.cpp:193
14# doris::vectorized::AggregationNode::get_next(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /root/yangzheng13/workspace/incubator-doris/be/src/vec/exec/vaggregation_node.cpp:464
15# doris::PlanFragmentExecutor::get_vectorized_internal(doris::vectorized::Block**) at /root/yangzheng13/workspace/incubator-doris/be/src/runtime/plan_fragment_executor.cpp:336
16# doris::PlanFragmentExecutor::open_vectorized_internal() at /root/yangzheng13/workspace/incubator-doris/be/src/runtime/plan_fragment_executor.cpp:284
17# doris::PlanFragmentExecutor::open() at /root/yangzheng13/workspace/incubator-doris/be/src/runtime/plan_fragment_executor.cpp:239
18# doris::FragmentExecState::execute() at /root/yangzheng13/workspace/incubator-doris/be/src/runtime/fragment_mgr.cpp:246
19# doris::FragmentMgr::_exec_actual(std::shared_ptr<doris::FragmentExecState>, std::function<void (doris::PlanFragmentExecutor*)>) at /root/yangzheng13/workspace/incubator-doris/be/src/runtime/fragment_mgr.cpp:499
20# std::_Function_handler<void (), doris::FragmentMgr::exec_plan_fragment(doris::TExecPlanFragmentParams const&, std::function<void (doris::PlanFragmentExecutor*)>)::{lambda()#1}>::_M_invoke(std::_Any_data const&) at /var/local/ldb-toolchain/include/c++/11/bits/std_function.h:291
21# doris::ThreadPool::dispatch_thread() at /root/yangzheng13/workspace/incubator-doris/be/src/util/threadpool.cpp:548
22# doris::Thread::supervise_thread(void*) at /root/yangzheng13/workspace/incubator-doris/be/src/util/thread.cpp:426
23# start_thread in /lib64/libpthread.so.0
24# clone in /lib64/libc.so.6

Anything Else?

none

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions