Uh oh!
There was an error while loading. Please reload this page.
branch-4.1: [feature](iceberg) Implements iceberg update delete merge into functionality. #60482 - #61818
Conversation
hello-stephen
commented
Mar 27, 2026
Thank you for your contribution to Apache Doris. Please clearly describe your PR:
|
kaka11chen
commented
Mar 27, 2026
run buildall |
doris-robot
commented
Mar 27, 2026
Cloud UT Coverage ReportIncrement line coverage Increment coverage report
|
hello-stephen
commented
Mar 27, 2026
FE UT Coverage ReportIncrement line coverage |
…onality. (apache#60482) [feature] (iceberg) Implements iceberg update & delete & merge into. 1. **Nereids Planner**: - Introduced parser and planner support for `DELETE`, `UPDATE`, and `MERGE INTO` targeting Iceberg tables. - Added specific plan nodes and rules (`IcebergDeleteCommand`, `IcebergMergeCommand`, `IcebergUpdateCommand`, `Logical/PhysicalIcebergDeleteSink`, `Logical/PhysicalIcebergMergeSink`). 2. **Frontend & Transaction**: - Handled Iceberg DML transactional context and snapshot commits via `IcebergTransaction`. - Implemented conflict detection and resolution utilities for concurrent modifications (`IcebergConflictDetectionFilterUtils`). - Added support for Iceberg metadata columns (e.g., `_file_path`, `_pos`) via `IcebergMetadataColumn` to accurately locate deleting records. 3. **Backend Execution Sinks**: - Introduced `VIcebergDeleteSink` and `VIcebergMergeSink` sink operators. - Added `VIcebergDeleteFileWriter` mechanism to support writing Position Delete files natively inside Doris BE. - Implemented routing and data shuffling logic via `MergePartitioner` and `IcebergPartitionFunction` to properly align input rows with Iceberg's partitioning constraints during writes. 4. **Scanner & Execution Decoupling**: - Adjusted `FileScanner` and `GenericReader` to natively support row-level operations (like generating `$row_id`), feeding precise coordinates for DML modifications. 5. **Quality Assurance**: - Added comprehensive logic/physical plan tests (e.g. `IcebergDDLAndDMLPlanTest`). - Extensive coverage of the sink components in BE Unit Tests (`viceberg_merge_sink_test.cpp`, `viceberg_delete_sink_test.cpp`, etc.). - Introduced standard regression test suites covering basic/advanced usages and edge cases for merge/update/delete (`regression-test/suites/external_table_p0/iceberg/dml/*`).
010249a to
142041bComparekaka11chen
commented
Mar 27, 2026
run buildall |
doris-robot
commented
Mar 27, 2026
Cloud UT Coverage ReportIncrement line coverage Increment coverage report
|
hello-stephen
commented
Mar 27, 2026
FE UT Coverage ReportIncrement line coverage |
doris-robot
commented
Mar 27, 2026
BE UT Coverage ReportIncrement line coverage Increment coverage report
|
hello-stephen
commented
Mar 27, 2026
BE Regression && UT Coverage ReportIncrement line coverage Increment coverage report
|
Uh oh!
There was an error while loading. Please reload this page.
…ead (#66506) ### What problem does this PR solve? Problem Summary: coredump: ``` *** Query id: 8bxxx-xxx *** *** is nereids: 1 *** *** tablet id: 0 *** *** Aborted at 1785897717 (unix time) try "date -d @1785897717" if you are using GNU date *** *** Current BE git commitID: 2607291 *** *** SIGSEGV address not mapped to object (@0x0) received by PID 1002 (TID 3954234 OR 0x7f42d110e6c0) from PID 0; stack trace: *** 0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, siginfo_t*, void*) in /usr/local/service/doris/lib/be/doris_be 1# PosixSignals::chained_handler(int, siginfo*, void*) [clone .part.10] in /usr/local/jdk/lib/server/libjvm.so 2# JVM_handle_linux_signal in /usr/local/jdk/lib/server/libjvm.so 3# 0x00007F8C17A4ABB0 in /lib64/libc.so.6 4# doris::Block::filter_block_internal(doris::Block*, std::vector<unsigned int, std::allocator<unsigned int> > const&, doris::PODArray<unsigned char, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, true>, 16ul, 15ul> const&) in /usr/local/service/doris/lib/be/doris_be 5# doris::Block::filter_block_internal(doris::Block*, doris::PODArray<unsigned char, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, true>, 16ul, 15ul> const&, unsigned int) in /usr/local/service/doris/lib/be/doris_be 6# doris::IcebergTableReader::get_next_block_inner(doris::Block*, unsigned long*, bool*) in /usr/local/service/doris/lib/be/doris_be 7# doris::TableFormatReader::get_next_block(doris::Block*, unsigned long*, bool*) in /usr/local/service/doris/lib/be/doris_be 8# doris::FileScanner::_get_block_wrapped(doris::RuntimeState*, doris::Block*, bool*) in /usr/local/service/doris/lib/be/doris_be 9# doris::FileScanner::_get_block_impl(doris::RuntimeState*, doris::Block*, bool*) in /usr/local/service/doris/lib/be/doris_be 10# doris::Scanner::get_block(doris::RuntimeState*, doris::Block*, bool*) in /usr/local/service/doris/lib/be/doris_be 11# doris::Scanner::get_block_after_projects(doris::RuntimeState*, doris::Block*, bool*) in /usr/local/service/doris/lib/be/doris_be 12# doris::ScannerScheduler::_scanner_scan(std::shared_ptr<doris::ScannerContext>, std::shared_ptr<doris::ScanTask>) in /usr/local/service/doris/lib/be/doris_be 13# std::_Function_handler<bool (), doris::ScannerScheduler::submit(std::shared_ptr<doris::ScannerContext>, std::shared_ptr<doris::ScanTask>)::$_0::operator()() const::{lambda()#1}>::_M_invoke(std::_Any_data const&) in /usr/local/service/doris/lib/be/doris_be 14# doris::ScannerSplitRunner::process_for(std::chrono::duration<long, std::ratio<1l, 1000000000l> >) in /usr/local/service/doris/lib/be/doris_be 15# doris::PrioritizedSplitRunner::process() in /usr/local/service/doris/lib/be/doris_be 16# doris::TimeSharingTaskExecutor::_dispatch_thread() in /usr/local/service/doris/lib/be/doris_be 17# doris::Thread::supervise_thread(void*) in /usr/local/service/doris/lib/be/doris_be 18# start_thread in /lib64/libc.so.6 19# __GI___clone3 in /lib64/libc.so.6 ``` The master branch is fine. This bug only exists in 4.1 branch and introduce by: #61818 This commit only pick this line from the pr in master: #60482 ### Release note None ### Check List (For Author) - Test <!-- At least one of them must be included. --> - [ ] Regression test - [ ] Unit Test - [ ] Manual test (add detailed scripts or steps below) - [x] No need to test or manual test. Explain why: - [ ] This is a refactor/code format and no logic has been changed. - [ ] Previous test can cover this change. - [ ] No code files have been changed. - [ ] Other reason <!-- Add your reason? --> - Behavior changed: - [x] No. - [ ] Yes. <!-- Explain the behavior change --> - Does this need documentation? - [x] No. - [ ] Yes. <!-- Add document PR link here. eg: apache/doris-website#1214 --> ### Check List (For Reviewer who merge this PR) - [ ] Confirm the release note - [ ] Confirm test cases - [ ] Confirm document - [ ] Add branch pick label <!-- Add branch pick label that this PR should merge into -->
What problem does this PR solve?
Issue Number: close #xxx
Related PR: #xxx
Problem Summary:
Release note
Cherry pick #60482
Check List (For Author)
Test
Behavior changed:
Does this need documentation?
Check List (For Reviewer who merge this PR)