This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 7a4b2f43136de7c860716ec71b79ebf2cdf49324 Author: airborne12 <airborn...@gmail.com> AuthorDate: Tue Sep 5 11:43:16 2023 +0800 [Fix](bitmap index) like predicate does not work in bitmap index (#23819) --- be/src/olap/rowset/segment_v2/segment_iterator.cpp | 10 +++- .../inverted_index_p0/test_index_like_select.out | 16 +++++++ .../test_index_like_select.groovy | 56 ++++++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index 4c54ade3d1..a163f1a99b 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -522,11 +522,19 @@ Status SegmentIterator::_apply_bitmap_index() { size_t input_rows = _row_bitmap.cardinality(); std::vector<ColumnPredicate*> remaining_predicates; + auto is_like_predicate = [](ColumnPredicate* _pred) { + if (static_cast<LikeColumnPredicate<TYPE_CHAR>*>(_pred) != nullptr || + static_cast<LikeColumnPredicate<TYPE_STRING>*>(_pred) != nullptr) { + return true; + } + return false; + }; for (auto pred : _col_predicates) { int32_t unique_id = _schema->unique_id(pred->column_id()); if (_bitmap_index_iterators.count(unique_id) < 1 || - _bitmap_index_iterators[unique_id] == nullptr || pred->type() == PredicateType::BF) { + _bitmap_index_iterators[unique_id] == nullptr || pred->type() == PredicateType::BF || + is_like_predicate(pred)) { // no bitmap index for this column remaining_predicates.push_back(pred); } else { diff --git a/regression-test/data/inverted_index_p0/test_index_like_select.out b/regression-test/data/inverted_index_p0/test_index_like_select.out index 1d96a1ec02..24701aec6e 100644 --- a/regression-test/data/inverted_index_p0/test_index_like_select.out +++ b/regression-test/data/inverted_index_p0/test_index_like_select.out @@ -157,6 +157,14 @@ zhang san grade 5 zhang yi chen san buy dancing book 10 2017-10-01T00:00 tall:12 -- !sql -- 22222222 +-- !sql -- +zhang san grade 5 zhang yi chen san 10 +zhang san yi grade 5 zhang yi chen san 11 + +-- !sql -- +zhang san grade 5 zhang yi chen san 10 +zhang san yi grade 5 zhang yi chen san 11 + -- !sql -- zhang san grade 5 zhang yi chen san buy dancing book 10 2017-10-01T00:00 tall:120cm, weight: 35kg, hobbies: sing, dancing Like cultural and recreational activities Class activists @@ -315,3 +323,11 @@ zhang san grade 5 zhang yi chen san buy dancing book 10 2017-10-01T00:00 tall:12 -- !sql -- 22222222 +-- !sql -- +zhang san grade 5 zhang yi chen san 10 +zhang san yi grade 5 zhang yi chen san 11 + +-- !sql -- +zhang san grade 5 zhang yi chen san 10 +zhang san yi grade 5 zhang yi chen san 11 + diff --git a/regression-test/suites/inverted_index_p0/test_index_like_select.groovy b/regression-test/suites/inverted_index_p0/test_index_like_select.groovy index 7ae3087ce1..975fac2eaa 100644 --- a/regression-test/suites/inverted_index_p0/test_index_like_select.groovy +++ b/regression-test/suites/inverted_index_p0/test_index_like_select.groovy @@ -206,5 +206,61 @@ suite("test_index_like_select", "inverted_index_select"){ order by name """ qt_sql """select 22222222""" + + // create DUP KEY table with bitmap index + def indexTbName2 = "bitmap_index_like" + sql "DROP TABLE IF EXISTS ${indexTbName2}" + sql """ + CREATE TABLE IF NOT EXISTS ${indexTbName2} ( + ${varchar_colume1} varchar(50), + ${varchar_colume2} varchar(30) NOT NULL, + ${varchar_colume3} varchar(50), + ${varchar_colume4} varchar(50), + ${int_colume1} int NOT NULL, + INDEX ${varchar_colume3}_idx(${varchar_colume3}) USING BITMAP COMMENT ' ${varchar_colume3} index' + ) + DUPLICATE KEY(`${varchar_colume1}`, `${varchar_colume2}`, `${varchar_colume3}`, `${varchar_colume4}`) + DISTRIBUTED BY HASH(`${varchar_colume1}`) BUCKETS 10 + properties("replication_num" = "1"); + """ + sql """ insert into ${indexTbName2} VALUES + ("zhang san", "grade 5", "zhang yi", "chen san", 10), + ("zhang san yi", "grade 5", "zhang yi", "chen san", 11), + ("li si", "grade 4", "li er", "wan jiu", 9), + ("san zhang", "grade 5", "", "", 10), + ("li sisi", "grade 6", "li ba", "li liuliu", 11) + """ + sql """ set enable_function_pushdown=true; """ + qt_sql """ + select * from ${indexTbName2} where ${varchar_colume3} like "zhang%" order by ${varchar_colume1} + """ + + // create AGG KEY table with bitmap index + def indexTbName3 = "bitmap_index_like2" + sql "DROP TABLE IF EXISTS ${indexTbName3}" + sql """ + CREATE TABLE IF NOT EXISTS ${indexTbName3} ( + ${varchar_colume1} varchar(50), + ${varchar_colume2} varchar(30) NOT NULL, + ${varchar_colume3} varchar(50), + ${varchar_colume4} varchar(50), + ${int_colume1} int SUM NULL DEFAULT "0", + INDEX ${varchar_colume3}_idx(${varchar_colume3}) USING BITMAP COMMENT ' ${varchar_colume3} index' + ) + AGGREGATE KEY(`${varchar_colume1}`, `${varchar_colume2}`, `${varchar_colume3}`, `${varchar_colume4}`) + DISTRIBUTED BY HASH(`${varchar_colume1}`) BUCKETS 10 + properties("replication_num" = "1"); + """ + sql """ insert into ${indexTbName3} VALUES + ("zhang san", "grade 5", "zhang yi", "chen san", 10), + ("zhang san yi", "grade 5", "zhang yi", "chen san", 11), + ("li si", "grade 4", "li er", "wan jiu", 9), + ("san zhang", "grade 5", "", "", 10), + ("li sisi", "grade 6", "li ba", "li liuliu", 11) + """ + sql """ set enable_function_pushdown=true; """ + qt_sql """ + select * from ${indexTbName3} where ${varchar_colume3} like "zhang%" order by ${varchar_colume1} + """ } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org