You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by da...@apache.org on 2022/07/19 13:14:36 UTC
[doris] branch master updated: [feature-wip](unique-key-merge-on-write) add segment lookup interface implementation, DSIP-018 (#10922)
This is an automated email from the ASF dual-hosted git repository.
dataroaring pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 371c7be235 [feature-wip](unique-key-merge-on-write) add segment lookup interface implementation, DSIP-018 (#10922)
371c7be235 is described below
commit 371c7be235e693d6c33aab041720b55e29b3a040
Author: Xin Liao <li...@126.com>
AuthorDate: Tue Jul 19 21:14:32 2022 +0800
[feature-wip](unique-key-merge-on-write) add segment lookup interface implementation, DSIP-018 (#10922)
---
be/src/olap/rowset/segment_v2/segment.cpp | 39 +++++++++++++++++++++++--------
be/src/olap/rowset/segment_v2/segment.h | 3 +++
2 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/be/src/olap/rowset/segment_v2/segment.cpp b/be/src/olap/rowset/segment_v2/segment.cpp
index f4e96833d3..6810b19c99 100644
--- a/be/src/olap/rowset/segment_v2/segment.cpp
+++ b/be/src/olap/rowset/segment_v2/segment.cpp
@@ -151,15 +151,21 @@ Status Segment::_load_index() {
opts.stats = &tmp_stats;
opts.type = INDEX_PAGE;
- Slice body;
- PageFooterPB footer;
- RETURN_IF_ERROR(PageIO::read_and_decompress_page(opts, &_sk_index_handle, &body, &footer));
- DCHECK_EQ(footer.type(), SHORT_KEY_PAGE);
- DCHECK(footer.has_short_key_page_footer());
-
- _mem_tracker->consume(body.get_size());
- _sk_index_decoder.reset(new ShortKeyIndexDecoder);
- return _sk_index_decoder->parse(body, footer.short_key_page_footer());
+ if (_tablet_schema.keys_type() == UNIQUE_KEYS && _footer.has_primary_key_index_meta()) {
+ _pk_index_reader.reset(new PrimaryKeyIndexReader());
+ return _pk_index_reader->parse(_file_reader, _footer.primary_key_index_meta());
+ } else {
+ Slice body;
+ PageFooterPB footer;
+ RETURN_IF_ERROR(
+ PageIO::read_and_decompress_page(opts, &_sk_index_handle, &body, &footer));
+ DCHECK_EQ(footer.type(), SHORT_KEY_PAGE);
+ DCHECK(footer.has_short_key_page_footer());
+
+ _mem_tracker->consume(body.get_size());
+ _sk_index_decoder.reset(new ShortKeyIndexDecoder);
+ return _sk_index_decoder->parse(body, footer.short_key_page_footer());
+ }
});
}
@@ -224,7 +230,20 @@ Status Segment::new_bitmap_index_iterator(const TabletColumn& tablet_column,
}
Status Segment::lookup_row_key(const Slice& key, RowLocation* row_location) {
- //TODO(liaoxin01): implement it after index related code merged.
+ RETURN_IF_ERROR(_load_index());
+ DCHECK(_pk_index_reader != nullptr);
+ if (!_pk_index_reader->check_present(key)) {
+ return Status::NotFound("Can't find key in the segment");
+ }
+ bool exact_match = false;
+ std::unique_ptr<segment_v2::IndexedColumnIterator> index_iterator;
+ RETURN_IF_ERROR(_pk_index_reader->new_iterator(&index_iterator));
+ RETURN_IF_ERROR(index_iterator->seek_at_or_after(&key, &exact_match));
+ if (!exact_match) {
+ return Status::NotFound("Can't find key in the segment");
+ }
+ row_location->row_id = index_iterator->get_current_ordinal();
+ row_location->segment_id = _segment_id;
return Status::OK();
}
diff --git a/be/src/olap/rowset/segment_v2/segment.h b/be/src/olap/rowset/segment_v2/segment.h
index d1d721449f..e2b71a05d2 100644
--- a/be/src/olap/rowset/segment_v2/segment.h
+++ b/be/src/olap/rowset/segment_v2/segment.h
@@ -27,6 +27,7 @@
#include "gutil/macros.h"
#include "io/fs/file_system.h"
#include "olap/iterators.h"
+#include "olap/primary_key_index.h"
#include "olap/rowset/segment_v2/page_handle.h"
#include "olap/short_key_index.h"
#include "olap/tablet_schema.h"
@@ -145,6 +146,8 @@ private:
PageHandle _sk_index_handle;
// short key index decoder
std::unique_ptr<ShortKeyIndexDecoder> _sk_index_decoder;
+ // primary key index reader
+ std::unique_ptr<PrimaryKeyIndexReader> _pk_index_reader;
};
} // namespace segment_v2
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org