This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
new 52a855ba55 [bugfix](vertical_compaction) fix base_compaction
delete_sign handler (#16469)
52a855ba55 is described below
commit 52a855ba55f4e9c9fe1ad7d5e037f09eb69dc1b8
Author: yixiutt <[email protected]>
AuthorDate: Thu Feb 9 10:13:41 2023 +0800
[bugfix](vertical_compaction) fix base_compaction delete_sign handler
(#16469)
In vertical base compaction, same rows will be filtered in
vertical_merge_iterator,
we should skip these filtered rows when set agg flag of delete sign.
For example, schema is a,b,delete_sign, and data is
1,1,1
1,1,0
1,1,0
2,2,1
2,2
and Block we get in VerticalBlockReader is
1,1,1
2,2,1
and we should set agg flag idex 0,4 to true when handle delete sign, so
we add a function continuous_agg_count to skip same rows filtered in
VerticalMergeIterator.
---
be/src/vec/olap/vertical_block_reader.cpp | 4 +++-
be/src/vec/olap/vertical_merge_iterator.cpp | 15 +++++++++++++++
be/src/vec/olap/vertical_merge_iterator.h | 3 +++
3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/be/src/vec/olap/vertical_block_reader.cpp
b/be/src/vec/olap/vertical_block_reader.cpp
index 42abc8a898..0f44b3e7f3 100644
--- a/be/src/vec/olap/vertical_block_reader.cpp
+++ b/be/src/vec/olap/vertical_block_reader.cpp
@@ -376,8 +376,10 @@ Status VerticalBlockReader::_unique_key_next_block(Block*
block, MemPool* mem_po
bool sign = (delete_data[i] == 0);
filter_data[i] = sign;
if (UNLIKELY(!sign)) {
- _row_sources_buffer->set_agg_flag(row_source_idx + i,
true);
+ _row_sources_buffer->set_agg_flag(row_source_idx, true);
}
+ // skip same rows filtered in vertical_merge_iterator
+ row_source_idx +=
_row_sources_buffer->continuous_agg_count(row_source_idx);
}
ColumnWithTypeAndName column_with_type_and_name
{_delete_filter_column,
diff --git a/be/src/vec/olap/vertical_merge_iterator.cpp
b/be/src/vec/olap/vertical_merge_iterator.cpp
index 2b9a7405a6..712feb9408 100644
--- a/be/src/vec/olap/vertical_merge_iterator.cpp
+++ b/be/src/vec/olap/vertical_merge_iterator.cpp
@@ -97,6 +97,21 @@ void RowSourcesBuffer::set_agg_flag(uint64_t index, bool
agg) {
_buffer->get_data()[index] = ori.data();
}
+size_t RowSourcesBuffer::continuous_agg_count(uint64_t index) {
+ size_t result = 1;
+ int start = index + 1;
+ int end = _buffer->size();
+ while (index < end) {
+ RowSource next(_buffer->get_element(start++));
+ if (next.agg_flag()) {
+ ++result;
+ } else {
+ break;
+ }
+ }
+ return result;
+}
+
size_t RowSourcesBuffer::same_source_count(uint16_t source, size_t limit) {
int result = 1;
int start = _buf_idx + 1;
diff --git a/be/src/vec/olap/vertical_merge_iterator.h
b/be/src/vec/olap/vertical_merge_iterator.h
index 0c6b66d8fc..421b65794d 100644
--- a/be/src/vec/olap/vertical_merge_iterator.h
+++ b/be/src/vec/olap/vertical_merge_iterator.h
@@ -103,6 +103,9 @@ public:
size_t same_source_count(uint16_t source, size_t limit);
+ // return continous agg_flag=true count from index
+ size_t continuous_agg_count(uint64_t index);
+
private:
Status _create_buffer_file();
Status _serialize();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]