laxfight commented on issue #33007:
URL: https://github.com/apache/doris/issues/33007#issuecomment-2051373380

   Thank you for your reply.   
   
   Our production environment experienced a crash when executing the following 
statement:
   ```SQL
   SELECT  t_a_0.`device_id` AS f_ax_0
   
   FROM
   
   (
   
          SELECT  b.device_type
   
                 ,A.device_id
   
                 ,b.engine_id
   
                 ,b.secondary_engine_id
   
                 , LEFT(b.sale_date, 10)
   
                 ,COUNT(1)
   
          FROM A
   
          LEFT JOIN B
   
          ON get_json_string(a.json_data, '$."[0]"') = b.id AND b.id = 'DL11'
   
          LEFT JOIN C
   
          ON a.device_id = c.id
   
          LEFT JOIN D
   
          ON get_json_string(a.json_data, '$."[0]"') = e.id
   
          LEFT JOIN F
   
          ON get_json_string(a.json_data, '$."[0]"') = f.id
   
          LEFT JOIN G
   
          ON get_json_string(a.json_data, '$."[0]"') = g.id
   
          WHERE a.device_id IS NOT NULL
   
          AND a.`status` = 'COMPLETED'
   
          AND b.device_type IS NOT NULL
   
          GROUP BY  b.device_type
   
                   ,a.device_id
   
                   ,b.engine_id
   
                   ,b.secondary_engine_id
   
                   , LEFT(b.sale_date, 10)
   
   ) t_a_0
   
   GROUP BY  t_a_0.`device_id`
   ```
   The statement was modified to the following, which restored normalcy:
   ```sql
   SELECT  t_a_0.`device_id` AS f_ax_0
   
   FROM
   
   (
   
          SELECT  b.device_type
   
                 ,A.device_id
   
                 ,b.engine_id
   
                 ,b.secondary_engine_id
                 -- modified
   
                 --, LEFT(b.sale_date, 10)
   
                 ,COUNT(1)
   
          FROM A
   
          LEFT JOIN B
   
          ON get_json_string(a.json_data, '$."[0]"') = b.id AND b.id = 'DL11'
   
          LEFT JOIN C
   
          ON a.device_id = c.id
   
          LEFT JOIN D
   
          ON get_json_string(a.json_data, '$."[0]"') = e.id
   
          LEFT JOIN F
   
          ON get_json_string(a.json_data, '$."[0]"') = f.id
   
          LEFT JOIN G
   
          ON get_json_string(a.json_data, '$."[0]"') = g.id
   
          WHERE a.device_id IS NOT NULL
   
          AND a.`status` = 'COMPLETED'
   
          AND b.device_type IS NOT NULL
   
          GROUP BY  b.device_type
   
                   ,a.device_id
   
                   ,b.engine_id
   
                   ,b.secondary_engine_id
                   -- modified
   
                   --, LEFT(b.sale_date, 10)
   
   ) t_a_0
   
   GROUP BY  t_a_0.`device_id`
   ```
   Alternatively, changing it to the following code also restored normal 
operation:
   ```sql
   SELECT  t_a_0.`device_id` AS f_ax_0
   
   FROM
   
   (
   
          SELECT  t.device_type
   
                 ,t.device_id
   
                 ,t.engine_id
   
                 ,t.secondary_engine_id
   
                 ,sd
                 ,count(1)
   
          FROM
   
          (
   
                 SELECT  b.device_type
   
                        ,A.device_id
   
                        ,b.engine_id
   
                        ,b.secondary_engine_id
   
                        ,LEFT(b.sale_date,10) AS sd
   
                 FROM A
   
                 LEFT JOIN B
   
                 ON get_json_string(a.json_data, '$."[0]"') = b.id AND b.id = 
'DL11'
   
                 LEFT JOIN C
   
                 ON a.device_id = c.id
   
                 LEFT JOIN D
   
                 ON get_json_string(a.json_data, '$."[0]"') = e.id
   
                 LEFT JOIN F
   
                 ON get_json_string(a.json_data, '$."[0]"') = f.id
   
                 LEFT JOIN G
   
                 ON get_json_string(a.json_data, '$."[0]"') = g.id
   
                 WHERE a.device_id IS NOT NULL
   
                 AND a.`status` = 'COMPLETED'
   
                 AND b.device_type IS NOT NULL
   
          )t
   
          GROUP BY  t.device_type
   
                   ,t.device_id
   
                   ,t.engine_id
   
                   ,t.sd
   
   ) t_a_0
   
   GROUP BY  t_a_0.`device_id`
   ```
   The same approach was applied to another SQL statement involving Distinct.
   
   As a result, we made the described modifications to all SQL aggregation 
operations, ultimately restoring normal operation.
   
   Based on these results, we speculate that certain function operations cannot 
be performed on columns used in GROUP BY or DISTINCT when executing 
aggregations, such as `GROUP BY xxx, LEFT(b.sale_date, 10)` or `DISTINCT xxx, 
LEFT(b.sale_date, 10)`. These statements, for some reason, lead to crashes in 
the library.
   
   Below are some error logs. Although the directory name in the logs is 
`apache-doris-be-1.1.2-bin-x86_64`, we actually replaced the files in the 
directory, and the actual version is 2.1.0.
   
   ```
   *** Query id: dad927596e224b47-9d2d83f1f7e04afe ***
   *** tablet id: 0 ***
   *** Aborted at 1711951667 (unix time) try "date -d @1711951667" if you are 
using GNU date ***
   *** Current BE git commitID: 91efb6a43d ***
   *** SIGSEGV unknown detail explain (@0x0) received by PID 30330 (TID 30602 
OR 0x7f382d9a8700) from PID 0; stack trace: ***
    0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, 
siginfo_t*, void*) at 
/home/zcp/repo_center/doris_release/doris/be/src/common/signal_handler.h:417
    1# os::Linux::chained_handler(int, siginfo*, void*) in 
/usr/java/jdk1.8.0_151/jre/lib/amd64/server/libjvm.so
    2# JVM_handle_linux_signal in 
/usr/java/jdk1.8.0_151/jre/lib/amd64/server/libjvm.so
    3# signalHandler(int, siginfo*, void*) in 
/usr/java/jdk1.8.0_151/jre/lib/amd64/server/libjvm.so
    4# 0x00007F38D6904400 in /lib64/libc.so.6
    5# doris::vectorized::VExprContext::execute(doris::vectorized::Block*, 
int*) at 
/home/zcp/repo_center/doris_release/doris/be/src/vec/exprs/vexpr_context.cpp:50
    6# 
doris::pipeline::JoinProbeLocalState<doris::pipeline::HashJoinSharedState, 
doris::pipeline::HashJoinProbeLocalState>::_build_output_block(doris::vectorized::Block*,
 doris::vectorized::Block*, bool) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/exec/join_probe_operator.cpp:127
    7# 
doris::pipeline::HashJoinProbeLocalState::filter_data_and_build_output(doris::RuntimeState*,
 doris::vectorized::Block*, bool*, doris::vectorized::Block*, bool) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/exec/hashjoin_probe_operator.cpp:433
    8# doris::pipeline::HashJoinProbeOperatorX::pull(doris::RuntimeState*, 
doris::vectorized::Block*, bool*) const at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/exec/hashjoin_probe_operator.cpp:364
    9# 
doris::pipeline::StatefulOperatorX<doris::pipeline::HashJoinProbeLocalState>::get_block(doris::RuntimeState*,
 doris::vectorized::Block*, bool*) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/operator.cpp:459
   10# 
doris::pipeline::OperatorXBase::get_block_after_projects(doris::RuntimeState*, 
doris::vectorized::Block*, bool*) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/operator.cpp:210
   11# 
doris::pipeline::StatefulOperatorX<doris::pipeline::DistinctStreamingAggLocalState>::get_block(doris::RuntimeState*,
 doris::vectorized::Block*, bool*) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/operator.cpp:444
   12# 
doris::pipeline::OperatorXBase::get_block_after_projects(doris::RuntimeState*, 
doris::vectorized::Block*, bool*) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/operator.cpp:210
   13# doris::pipeline::PipelineXTask::execute(bool*) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/pipeline_x_task.cpp:274
   14# doris::pipeline::TaskScheduler::_do_work(unsigned long) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/task_scheduler.cpp:334
   15# doris::ThreadPool::dispatch_thread() in 
/opt/soft/apache-doris-be-1.1.2-bin-x86_64/be/lib/doris_be
   16# doris::Thread::supervise_thread(void*) at 
/home/zcp/repo_center/doris_release/doris/be/src/util/thread.cpp:499
   17# start_thread in /lib64/libpthread.so.0
   18# clone in /lib64/libc.so.6w
   ```
   
   
   ```
   *** Query id: ef491c0a7c2e4447-97d2f477293425fc ***
   *** tablet id: 0 ***
   *** Aborted at 1711950862 (unix time) try "date -d @1711950862" if you are 
using GNU date ***
   *** Current BE git commitID: 91efb6a43d ***
   *** SIGSEGV unknown detail explain (@0x0) received by PID 26242 (TID 26641 
OR 0x7f8cb70a2700) from PID 0; stack trace: ***
    0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, 
siginfo_t*, void*) at 
/home/zcp/repo_center/doris_release/doris/be/src/common/signal_handler.h:417
    1# os::Linux::chained_handler(int, siginfo*, void*) in 
/usr/java/jdk1.8.0_151/jre/lib/amd64/server/libjvm.so
    2# JVM_handle_linux_signal in 
/usr/java/jdk1.8.0_151/jre/lib/amd64/server/libjvm.so
    3# signalHandler(int, siginfo*, void*) in 
/usr/java/jdk1.8.0_151/jre/lib/amd64/server/libjvm.so
    4# 0x00007F8D62F6D400 in /lib64/libc.so.6
    5# doris::vectorized::VExprContext::execute(doris::vectorized::Block*, 
int*) at 
/home/zcp/repo_center/doris_release/doris/be/src/vec/exprs/vexpr_context.cpp:50
    6# 
doris::pipeline::JoinProbeLocalState<doris::pipeline::HashJoinSharedState, 
doris::pipeline::HashJoinProbeLocalState>::_build_output_block(doris::vectorized::Block*,
 doris::vectorized::Block*, bool) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/exec/join_probe_operator.cpp:127
    7# 
doris::pipeline::HashJoinProbeLocalState::filter_data_and_build_output(doris::RuntimeState*,
 doris::vectorized::Block*, bool*, doris::vectorized::Block*, bool) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/exec/hashjoin_probe_operator.cpp:433
    8# doris::pipeline::HashJoinProbeOperatorX::pull(doris::RuntimeState*, 
doris::vectorized::Block*, bool*) const at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/exec/hashjoin_probe_operator.cpp:364
    9# 
doris::pipeline::StatefulOperatorX<doris::pipeline::HashJoinProbeLocalState>::get_block(doris::RuntimeState*,
 doris::vectorized::Block*, bool*) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/operator.cpp:459
   10# 
doris::pipeline::OperatorXBase::get_block_after_projects(doris::RuntimeState*, 
doris::vectorized::Block*, bool*) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/operator.cpp:210
   11# 
doris::pipeline::StatefulOperatorX<doris::pipeline::DistinctStreamingAggLocalState>::get_block(doris::RuntimeState*,
 doris::vectorized::Block*, bool*) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/operator.cpp:444
   12# 
doris::pipeline::OperatorXBase::get_block_after_projects(doris::RuntimeState*, 
doris::vectorized::Block*, bool*) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/operator.cpp:210
   13# doris::pipeline::PipelineXTask::execute(bool*) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/pipeline_x_task.cpp:274
   14# doris::pipeline::TaskScheduler::_do_work(unsigned long) at 
/home/zcp/repo_center/doris_release/doris/be/src/pipeline/task_scheduler.cpp:334
   15# doris::ThreadPool::dispatch_thread() in 
/opt/soft/apache-doris-be-1.1.2-bin-x86_64/be/lib/doris_be
   16# doris::Thread::supervise_thread(void*) at 
/home/zcp/repo_center/doris_release/doris/be/src/util/thread.cpp:499
   17# start_thread in /lib64/libpthread.so.0
   18# clone in /lib64/libc.so.6
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to