diff --git a/be/src/olap/rowset/segment_v2/segment.cpp b/be/src/olap/rowset/segment_v2/segment.cpp index 06cc32d7e277be..bf41f3a12e99a9 100644 --- a/be/src/olap/rowset/segment_v2/segment.cpp +++ b/be/src/olap/rowset/segment_v2/segment.cpp @@ -172,6 +172,18 @@ Status Segment::new_iterator(SchemaSPtr schema, const StorageReadOptions& read_o if (pruned) { auto options_with_pruned_predicates = read_options; options_with_pruned_predicates.column_predicates = pruned_predicates; + //because column_predicates is changed, we need to rebuild col_id_to_predicates so that inverted index will not go through it. + options_with_pruned_predicates.col_id_to_predicates.clear(); + for (auto* pred : options_with_pruned_predicates.column_predicates) { + if (!options_with_pruned_predicates.col_id_to_predicates.contains( + pred->column_id())) { + options_with_pruned_predicates.col_id_to_predicates.insert( + {pred->column_id(), std::make_shared()}); + } + auto* single_column_block_predicate = new SingleColumnBlockPredicate(pred); + options_with_pruned_predicates.col_id_to_predicates[pred->column_id()] + ->add_column_predicate(single_column_block_predicate); + } LOG(INFO) << "column_predicates pruned from " << read_options.column_predicates.size() << " to " << pruned_predicates.size(); return iter->get()->init(options_with_pruned_predicates);