@@ -953,22 +953,25 @@ RangesInDataParts MergeTreeDataSelectExecutor::filterPartsByPrimaryKeyAndSkipInd
953953 ProfileEventTimeIncrement<Microseconds> watch (ProfileEvents::FilteringMarksWithSecondaryKeysMicroseconds);
954954
955955 auto min_max_granules = getMinMaxIndexGranules (ranges.data_part ,
956- ranges.ranges ,
957956 skip_indexes.skip_index_for_top_n_filtering ,
957+ ranges.ranges ,
958958 top_n_filter_info->direction ,
959959 false , /* access_by_mark*/
960960 reader_settings,
961961 mark_cache.get (),
962962 uncompressed_cache.get (),
963963 vector_similarity_index_cache.get ());
964964
965- std::vector<size_t > result;
966- min_max_granules->getTopNMarks (top_n_filter_info->limit_n , result);
967- MarkRanges res;
968- for (auto range : result)
969- res.push_back ({range, range + 1 });
970- std::sort (res.begin (), res.end ());
971- ranges.ranges = res;
965+ if (min_max_granules) // / minmax index may have not been materialized for this part, not a fatal error
966+ {
967+ std::vector<size_t > result;
968+ min_max_granules->getTopNMarks (top_n_filter_info->limit_n , result);
969+ MarkRanges res;
970+ for (auto range : result)
971+ res.push_back ({range, range + 1 });
972+ std::sort (res.begin (), res.end ());
973+ ranges.ranges = res;
974+ }
972975 top_n_elapsed_us.fetch_add (watch.elapsed (), std::memory_order_relaxed);
973976 }
974977 sum_marks_after_top_n.fetch_add (ranges.ranges .getNumberOfMarks (), std::memory_order_relaxed);
@@ -2245,16 +2248,20 @@ void MergeTreeDataSelectExecutor::selectPartsToReadWithUUIDFilter(
22452248MergeTreeIndexBulkGranulesMinMaxPtr
22462249MergeTreeDataSelectExecutor::getMinMaxIndexGranules (
22472250 MergeTreeData::DataPartPtr part,
2248- const MarkRanges & ranges,
22492251 MergeTreeIndexPtr skip_index_minmax,
2252+ const MarkRanges & ranges,
22502253 int direction,
22512254 bool access_by_mark,
22522255 const MergeTreeReaderSettings & reader_settings,
22532256 MarkCache * mark_cache,
22542257 UncompressedCache * uncompressed_cache,
22552258 VectorSimilarityIndexCache * vector_similarity_index_cache)
22562259{
2257- // / TODO - make sure it is a minmax index and index is materialized for part
2260+ if (!skip_index_minmax->getDeserializedFormat (part->checksums , skip_index_minmax->getFileName ()))
2261+ {
2262+ return nullptr ;
2263+ }
2264+
22582265 auto index_granularity = skip_index_minmax->index .granularity ;
22592266 size_t marks_count = part->index_granularity ->getMarksCountWithoutFinal ();
22602267 size_t index_marks_count = (marks_count + index_granularity - 1 ) / index_granularity;
0 commit comments