Skip to content

[Bug] BE crashed with a query #61095

@AetheWu

Description

@AetheWu

Search before asking

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

Version

v4.0.2

What's Wrong?

BE crashed, be.out :

start BE in local mode
INFO: java_cmd /usr/lib/jvm/java-17-openjdk-amd64/bin/java
INFO: jdk_version 17
INFO: java_cmd /usr/lib/jvm/java-17-openjdk-amd64/bin/java
INFO: jdk_version 17
StdoutLogger 2026-02-28 13:43:53,606 Start time: Sat Feb 28 13:43:53 CST 2026
INFO: java_cmd /usr/lib/jvm/java-17-openjdk-amd64/bin/java
INFO: jdk_version 17
OpenJDK 64-Bit Server VM warning: Option CriticalJNINatives was deprecated in version 16.0 and will likely be removed in a future release.
SLF4J(W): Class path contains multiple SLF4J providers.
SLF4J(W): Found provider [org.apache.logging.slf4j.SLF4JServiceProvider@64c64813]
SLF4J(W): Found provider [org.slf4j.reload4j.Reload4jServiceProvider@3ecf72fd]
SLF4J(W): See https://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J(I): Actual provider is of type [org.apache.logging.slf4j.SLF4JServiceProvider@64c64813]
start BE in local mode
terminate called after throwing an instance of 'std::out_of_range'
  what():  map::at
*** Query id: 910040935a2c474a-866312329dc9d2ea ***
*** is nereids: 1 ***
*** tablet id: 0 ***
*** Aborted at 1772761436 (unix time) try "date -d @1772761436" if you are using GNU date ***
*** Current BE git commitID: 30d2df0459 ***
*** SIGABRT unknown detail explain (@0x6a52) received by PID 27218 (TID 1311 OR 0x7fc0b13da700) from PID 27218; 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:420
 1# 0x00007FCAF74CA980 in /lib/x86_64-linux-gnu/libpthread.so.0
 2# raise in /lib/x86_64-linux-gnu/libc.so.6
 3# abort in /lib/x86_64-linux-gnu/libc.so.6
 4# __gnu_cxx::__verbose_terminate_handler() [clone .cold] in /app/doris/apache-doris-4.0.2-bin-x64/be/lib/doris_be
 5# __cxxabiv1::__terminate(void (*)()) in /app/doris/apache-doris-4.0.2-bin-x64/be/lib/doris_be
 6# 0x000055D1DD974479 in /app/doris/apache-doris-4.0.2-bin-x64/be/lib/doris_be
 7# __cxa_rethrow.cold in /app/doris/apache-doris-4.0.2-bin-x64/be/lib/doris_be
 8# std::__throw_out_of_range(char const*) in /app/doris/apache-doris-4.0.2-bin-x64/be/lib/doris_be
 9# 0x000055D1D816E1D4 in /app/doris/apache-doris-4.0.2-bin-x64/be/lib/doris_be
10# doris::vectorized::TableSchemaChangeHelper::StructNode::children_column_exists(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) const at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/format/table/table_format_reader.h:195
11# doris::vectorized::ParquetReader::init_reader(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<doris::ColumnValueRange<(doris::PrimitiveType)3>, doris::ColumnValueRange<(doris::PrimitiveType)4>, doris::ColumnValueRange<(doris::PrimitiveType)5>, doris::ColumnValueRange<(doris::PrimitiveType)6>, doris::ColumnValueRange<(doris::PrimitiveType)7>, doris::ColumnValueRange<(doris::PrimitiveType)8>, doris::ColumnValueRange<(doris::PrimitiveType)9>, doris::ColumnValueRange<(doris::PrimitiveType)36>, doris::ColumnValueRange<(doris::PrimitiveType)37>, doris::ColumnValueRange<(doris::PrimitiveType)15>, doris::ColumnValueRange<(doris::PrimitiveType)10>, doris::ColumnValueRange<(doris::PrimitiveType)23>, doris::ColumnValueRange<(doris::PrimitiveType)11>, doris::ColumnValueRange<(doris::PrimitiveType)25>, doris::ColumnValueRange<(doris::PrimitiveType)12>, doris::ColumnValueRange<(doris::PrimitiveType)26>, doris::ColumnValueRange<(doris::PrimitiveType)20>, doris::ColumnValueRange<(doris::PrimitiveType)2>, doris::ColumnValueRange<(doris::PrimitiveType)19>, doris::ColumnValueRange<(doris::PrimitiveType)28>, doris::ColumnValueRange<(doris::PrimitiveType)29>, doris::ColumnValueRange<(doris::PrimitiveType)30>, doris::ColumnValueRange<(doris::PrimitiveType)35> >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::variant<doris::ColumnValueRange<(doris::PrimitiveType)3>, doris::ColumnValueRange<(doris::PrimitiveType)4>, doris::ColumnValueRange<(doris::PrimitiveType)5>, doris::ColumnValueRange<(doris::PrimitiveType)6>, doris::ColumnValueRange<(doris::PrimitiveType)7>, doris::ColumnValueRange<(doris::PrimitiveType)8>, doris::ColumnValueRange<(doris::PrimitiveType)9>, doris::ColumnValueRange<(doris::PrimitiveType)36>, doris::ColumnValueRange<(doris::PrimitiveType)37>, doris::ColumnValueRange<(doris::PrimitiveType)15>, doris::ColumnValueRange<(doris::PrimitiveType)10>, doris::ColumnValueRange<(doris::PrimitiveType)23>, doris::ColumnValueRange<(doris::PrimitiveType)11>, doris::ColumnValueRange<(doris::PrimitiveType)25>, doris::ColumnValueRange<(doris::PrimitiveType)12>, doris::ColumnValueRange<(doris::PrimitiveType)26>, doris::ColumnValueRange<(doris::PrimitiveType)20>, doris::ColumnValueRange<(doris::PrimitiveType)2>, doris::ColumnValueRange<(doris::PrimitiveType)19>, doris::ColumnValueRange<(doris::PrimitiveType)28>, doris::ColumnValueRange<(doris::PrimitiveType)29>, doris::ColumnValueRange<(doris::PrimitiveType)30>, doris::ColumnValueRange<(doris::PrimitiveType)35> > > > > const*, std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > > const&, doris::TupleDescriptor const*, doris::RowDescriptor const*, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > > const*, std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > > const*, std::unordered_map<int, std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > >, std::hash<int>, std::equal_to<int>, std::allocator<std::pair<int const, std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > > > > > const*, std::shared_ptr<doris::vectorized::TableSchemaChangeHelper::Node>, bool) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/format/parquet/vparquet_reader.cpp:350
12# doris::vectorized::IcebergParquetReader::init_reader(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<doris::ColumnValueRange<(doris::PrimitiveType)3>, doris::ColumnValueRange<(doris::PrimitiveType)4>, doris::ColumnValueRange<(doris::PrimitiveType)5>, doris::ColumnValueRange<(doris::PrimitiveType)6>, doris::ColumnValueRange<(doris::PrimitiveType)7>, doris::ColumnValueRange<(doris::PrimitiveType)8>, doris::ColumnValueRange<(doris::PrimitiveType)9>, doris::ColumnValueRange<(doris::PrimitiveType)36>, doris::ColumnValueRange<(doris::PrimitiveType)37>, doris::ColumnValueRange<(doris::PrimitiveType)15>, doris::ColumnValueRange<(doris::PrimitiveType)10>, doris::ColumnValueRange<(doris::PrimitiveType)23>, doris::ColumnValueRange<(doris::PrimitiveType)11>, doris::ColumnValueRange<(doris::PrimitiveType)25>, doris::ColumnValueRange<(doris::PrimitiveType)12>, doris::ColumnValueRange<(doris::PrimitiveType)26>, doris::ColumnValueRange<(doris::PrimitiveType)20>, doris::ColumnValueRange<(doris::PrimitiveType)2>, doris::ColumnValueRange<(doris::PrimitiveType)19>, doris::ColumnValueRange<(doris::PrimitiveType)28>, doris::ColumnValueRange<(doris::PrimitiveType)29>, doris::ColumnValueRange<(doris::PrimitiveType)30>, doris::ColumnValueRange<(doris::PrimitiveType)35> >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::variant<doris::ColumnValueRange<(doris::PrimitiveType)3>, doris::ColumnValueRange<(doris::PrimitiveType)4>, doris::ColumnValueRange<(doris::PrimitiveType)5>, doris::ColumnValueRange<(doris::PrimitiveType)6>, doris::ColumnValueRange<(doris::PrimitiveType)7>, doris::ColumnValueRange<(doris::PrimitiveType)8>, doris::ColumnValueRange<(doris::PrimitiveType)9>, doris::ColumnValueRange<(doris::PrimitiveType)36>, doris::ColumnValueRange<(doris::PrimitiveType)37>, doris::ColumnValueRange<(doris::PrimitiveType)15>, doris::ColumnValueRange<(doris::PrimitiveType)10>, doris::ColumnValueRange<(doris::PrimitiveType)23>, doris::ColumnValueRange<(doris::PrimitiveType)11>, doris::ColumnValueRange<(doris::PrimitiveType)25>, doris::ColumnValueRange<(doris::PrimitiveType)12>, doris::ColumnValueRange<(doris::PrimitiveType)26>, doris::ColumnValueRange<(doris::PrimitiveType)20>, doris::ColumnValueRange<(doris::PrimitiveType)2>, doris::ColumnValueRange<(doris::PrimitiveType)19>, doris::ColumnValueRange<(doris::PrimitiveType)28>, doris::ColumnValueRange<(doris::PrimitiveType)29>, doris::ColumnValueRange<(doris::PrimitiveType)30>, doris::ColumnValueRange<(doris::PrimitiveType)35> > > > > const*, std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > > const&, doris::TupleDescriptor const*, doris::RowDescriptor const*, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > > const*, std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > > const*, std::unordered_map<int, std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > >, std::hash<int>, std::equal_to<int>, std::allocator<std::pair<int const, std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > > > > > const*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/format/table/iceberg_reader.cpp:463
13# doris::vectorized::FileScanner::_init_parquet_reader(std::unique_ptr<doris::vectorized::ParquetReader, std::default_delete<doris::vectorized::ParquetReader> >&&, doris::FileMetaCache*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/scan/file_scanner.cpp:1203
14# doris::vectorized::FileScanner::read_lines_from_range(doris::TFileRangeDesc const&, std::__cxx11::list<long, std::allocator<long> > const&, doris::vectorized::Block*, doris::ExternalFileMappingInfo const&, long*, long*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/scan/file_scanner.cpp:1508
15# std::_Function_handler<bool (), doris::RowIdStorageReader::read_batch_external_row(unsigned long, doris::PRequestBlockDesc const&, std::shared_ptr<doris::IdFileMap>, std::vector<doris::SlotDescriptor, std::allocator<doris::SlotDescriptor> >&, std::shared_ptr<doris::FileMapping>, doris::TUniqueId const&, doris::vectorized::Block&, doris::PRuntimeProfileTree*, long*, long*, unsigned long*)::$_0::operator()() const::{lambda()#1}>::_M_invoke(std::_Any_data const&) at /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:292
16# doris::vectorized::TaskExecutorSimplifiedScanScheduler::submit_scan_task(doris::vectorized::SimplifiedScanTask, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda()#2}::operator()() const at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/scan/scanner_scheduler.h:339
17# doris::vectorized::ScannerSplitRunner::process_for(std::chrono::duration<long, std::ratio<1l, 1000000000l> >) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/scan/scanner_scheduler.cpp:408
18# doris::vectorized::PrioritizedSplitRunner::process() at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/executor/time_sharing/prioritized_split_runner.cpp:104
19# doris::vectorized::TimeSharingTaskExecutor::_dispatch_thread() at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/executor/time_sharing/time_sharing_task_executor.cpp:572
20# doris::Thread::supervise_thread(void*) at /home/zcp/repo_center/doris_release/doris/be/src/util/thread.cpp:461
21# start_thread in /lib/x86_64-linux-gnu/libpthread.so.0
22# __clone in /lib/x86_64-linux-gnu/libc.so.6

What You Expected?

no crash

How to Reproduce?

execute a query on a view:

WITH RankedData AS (
    SELECT 
        SECOND_FLOOR(ts, 10) AS window_ts, 
        bank_id, 
        rack_no, 
        Vrack,
        ROW_NUMBER() OVER (
            PARTITION BY SECOND_FLOOR(ts, 10), bank_id, rack_no 
            ORDER BY ts DESC 
        ) as rn
    FROM v_rack_dataset
)
SELECT 
    window_ts AS ts, 
    bank_id, 
    rack_no, 
    Vrack
FROM RankedData 
WHERE rn = 1  
ORDER BY ts ASC;

the view created with SQL:

CREATE OR REPLACE
VIEW `v_rack_dataset`
(ts,
bank_id,
rack_no,
Vrack)
 AS
SELECT
    `internal`.`testdb`.`rack_dataset`.`ts`,
    `internal`.`testdb`.`rack_dataset`.`bank_id`,
    `internal`.`testdb`.`rack_dataset`.`rack_no`,
    `internal`.`testdb`.`rack_dataset`.`Vrack`
FROM
    `internal`.`testdb`.`rack_dataset`
WHERE
    `internal`.`testdb`.`rack_dataset`.`ts` >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
UNION ALL
SELECT
    `test_catalog`.`iot`.`rack_dataset`.`ts`,
    `test_catalog`.`iot`.`rack_dataset`.`bank_id`,
    `test_catalog`.`iot`.`rack_dataset`.`rack_no`,
    `test_catalog`.`iot`.`rack_dataset`.`Vrack`
FROM
    `test_catalog`.`iot`.`rack_dataset`;

the view union internal table and external iceberg catalog table;

Anything Else?

Direct queries on either internal tables or external tables show no anomalies.

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions