diff --git a/be/src/olap/iterators.h b/be/src/olap/iterators.h index f1b195f8f98d26..05b8bd63ed0fcb 100644 --- a/be/src/olap/iterators.h +++ b/be/src/olap/iterators.h @@ -92,6 +92,8 @@ class StorageReadOptions { int block_row_max = 4096 - 32; // see https://github.com/apache/doris/pull/11816 TabletSchemaSPtr tablet_schema = nullptr; + // for unique key merge on write + bool enable_unique_key_merge_on_write = false; bool record_rowids = false; // flag for enable topn opt bool use_topn_opt = false; diff --git a/be/src/olap/rowset/beta_rowset_reader.cpp b/be/src/olap/rowset/beta_rowset_reader.cpp index 0f8ee1715621db..bb11347990c5cb 100644 --- a/be/src/olap/rowset/beta_rowset_reader.cpp +++ b/be/src/olap/rowset/beta_rowset_reader.cpp @@ -215,6 +215,8 @@ Status BetaRowsetReader::get_segment_iterators(RowsetReaderContext* read_context } _read_options.use_page_cache = _read_context->use_page_cache; _read_options.tablet_schema = _read_context->tablet_schema; + _read_options.enable_unique_key_merge_on_write = + _read_context->enable_unique_key_merge_on_write; _read_options.record_rowids = _read_context->record_rowids; _read_options.use_topn_opt = _read_context->use_topn_opt; _read_options.read_orderby_key_reverse = _read_context->read_orderby_key_reverse; diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index 24c452f383a11d..ec559f9955e02b 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -1042,10 +1042,12 @@ Status SegmentIterator::_apply_inverted_index_on_block_column_predicate( } bool SegmentIterator::_need_read_data(ColumnId cid) { - // for safety reason, only support DUP_KEYS - if (_opts.tablet_schema->keys_type() != KeysType::DUP_KEYS) { + if (_opts.tablet_schema->keys_type() != KeysType::DUP_KEYS && + !(_opts.tablet_schema->keys_type() == UNIQUE_KEYS && + _opts.enable_unique_key_merge_on_write)) { return true; } + if (_output_columns.count(-1)) { // if _output_columns contains -1, it means that the light // weight schema change may not be enabled or other reasons