diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index 52e0ecd5d2..7e64c25999 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -2475,7 +2475,19 @@ bool SegmentIterator::_no_need_read_key_data(ColumnId cid, vectorized::MutableCo return false; } - if (!_check_all_conditions_passed_inverted_index_for_column(cid)) { + // seek_schema is set when get_row_ranges_by_keys, it is null when there is no primary key range + // in this case, we need to read data + if (!_seek_schema) { + return false; + } + // check if the column is in the seek_schema + if (std::none_of(_seek_schema->columns().begin(), _seek_schema->columns().end(), + [&](const Field* col) { + return (col && _opts.tablet_schema->field_index(col->unique_id()) == cid); + })) { + return false; + } + if (!_check_all_conditions_passed_inverted_index_for_column(cid, true)) { return false; } diff --git a/regression-test/suites/inverted_index_p0/test_pk_no_need_read_data.groovy b/regression-test/suites/inverted_index_p0/test_pk_no_need_read_data.groovy index b8cf3f4c0b..284446b4a4 100644 --- a/regression-test/suites/inverted_index_p0/test_pk_no_need_read_data.groovy +++ b/regression-test/suites/inverted_index_p0/test_pk_no_need_read_data.groovy @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -suite("test_pk_no_need_read_data", "p0"){ +suite("test_pk_no_need_read_data", "nonConcurrent"){ def table1 = "test_pk_no_need_read_data" sql "drop table if exists ${table1}" @@ -56,12 +56,15 @@ suite("test_pk_no_need_read_data", "p0"){ sql "set enable_count_on_index_pushdown = true" sql """ set enable_common_expr_pushdown = true """ - qt_select_0 "SELECT COUNT() FROM ${table1} WHERE date='2017-10-01'" + try { + GetDebugPoint().enableDebugPointForAllBEs("segment_iterator._read_columns_by_index") + qt_select_0 "SELECT COUNT() FROM ${table1} WHERE date='2017-10-01'" + } finally { + GetDebugPoint().disableDebugPointForAllBEs("segment_iterator._read_columns_by_index") + } qt_select_1 "SELECT COUNT() FROM ${table1} WHERE year(date)='2017'" - - // case1: disable count on index + // case2: disable count on index sql "set enable_count_on_index_pushdown = false" - qt_select_2 "SELECT COUNT() FROM ${table1} WHERE date='2017-10-01'" qt_select_3 "SELECT COUNT() FROM ${table1} WHERE year(date)='2017'" } \ No newline at end of file