diff --git a/be/src/olap/rowset/segment_v2/hierarchical_data_reader.cpp b/be/src/olap/rowset/segment_v2/hierarchical_data_reader.cpp index c9516c870b8b9c..e739028a3e7b50 100644 --- a/be/src/olap/rowset/segment_v2/hierarchical_data_reader.cpp +++ b/be/src/olap/rowset/segment_v2/hierarchical_data_reader.cpp @@ -497,6 +497,11 @@ Status SparseColumnMergeReader::init(const ColumnIteratorOptions& opts) { const auto& path = entry->path.get_path(); _sorted_src_subcolumn_for_sparse.emplace_back(StringRef(path.data(), path.size()), entry); } + + // sort src subcolumns by path + std::sort( + _sorted_src_subcolumn_for_sparse.begin(), _sorted_src_subcolumn_for_sparse.end(), + [](const auto& lhsItem, const auto& rhsItem) { return lhsItem.first < rhsItem.first; }); return Status::OK(); } @@ -536,11 +541,10 @@ void SparseColumnMergeReader::_process_data_without_sparse_column(vectorized::Mu auto& sparse_column_offsets = map_column.get_offsets(); for (size_t i = 0; i != num_rows; ++i) { // Paths in sorted_src_subcolumn_for_sparse_column are already sorted. - for (const auto& entry : _src_subcolumns_for_sparse) { - const auto& path = entry->path.get_path(); - _serialize_nullable_column_to_sparse(entry.get(), sparse_column_keys, - sparse_column_values, - StringRef(path.data(), path.size()), i); + for (const auto& entry : _sorted_src_subcolumn_for_sparse) { + const auto& path = entry.first; + _serialize_nullable_column_to_sparse(entry.second.get(), sparse_column_keys, + sparse_column_values, path, i); } sparse_column_offsets.push_back(sparse_column_keys.size()); }