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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions