From dc7b60f64ec241516f2ab618a8ebd7175e1626f2 Mon Sep 17 00:00:00 2001 From: Kang Date: Sun, 18 Feb 2024 23:57:26 +0800 Subject: [PATCH 1/2] add MOW for _need_read_key_data and _need_read_data --- be/src/olap/iterators.h | 2 ++ be/src/olap/rowset/beta_rowset_reader.cpp | 2 ++ be/src/olap/rowset/segment_v2/segment_iterator.cpp | 10 +++++++--- 3 files changed, 11 insertions(+), 3 deletions(-) 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..4cb32bfc04111a 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 @@ -2447,7 +2449,9 @@ void SegmentIterator::_calculate_pred_in_remaining_conjunct_root( bool SegmentIterator::_need_read_key_data(ColumnId cid, vectorized::MutableColumnPtr& column, size_t nrows_read) { - 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 false; } From 32ce302111af3695d834a1142fa03881d03bee02 Mon Sep 17 00:00:00 2001 From: Kang Date: Mon, 19 Feb 2024 01:15:10 +0800 Subject: [PATCH 2/2] fix --- be/src/olap/rowset/segment_v2/segment_iterator.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index 4cb32bfc04111a..ec559f9955e02b 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -2449,9 +2449,7 @@ void SegmentIterator::_calculate_pred_in_remaining_conjunct_root( bool SegmentIterator::_need_read_key_data(ColumnId cid, vectorized::MutableColumnPtr& column, size_t nrows_read) { - if (_opts.tablet_schema->keys_type() != KeysType::DUP_KEYS && - !(_opts.tablet_schema->keys_type() == UNIQUE_KEYS && - _opts.enable_unique_key_merge_on_write)) { + if (_opts.tablet_schema->keys_type() != KeysType::DUP_KEYS) { return false; }