zhf999 opened a new pull request, #207: URL: https://github.com/apache/paimon-cpp/pull/207
<!-- PR title: perf(parquet): reuse leaf column index set across fields in page-filtered reads --> ### Purpose `PageFilteredRowGroupReader::ReadFilteredRowGroup()` reads one top-level field at a time and, for every field, calls the patched Arrow API `parquet::arrow::FileReader::GetColumn(i, column_indices, iterator_factory, out)` to build a leaf-filtered reader tree. That API used to take a `const std::vector<int>&` and internally convert it with `VectorToSharedSet(column_indices)`, so a fresh `std::unordered_set<int>` was allocated and populated on **every** call, i.e. once per projected top-level field per row group. For wide projections and many filtered row groups this is a repeated allocation plus hashing of the same, unchanging leaf index set on the hot read path. No behavioral change is intended: the set contents are identical to what `VectorToSharedSet()` produced from the same `column_indices` vector, and the public `ReadFilteredRowGroup()` signature (which still takes `const std::vector<int32_t>&`) is unchanged. Only the internal helper and the vendored-Arrow patch signature change. Note: because `cmake_modules/arrow.diff` is part of the change, the Arrow external project must be re-patched and rebuilt for the new signature to take effect; a stale Arrow install directory will fail to compile the caller. ### Tests No new test is added. ### API and Format No change to public API. ### Documentation No new feature. ### Generative AI tooling No. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
