goutamadwant opened a new pull request, #12978:
URL: https://github.com/apache/seatunnel/pull/12978

   <!--
   Thank you for contributing to SeaTunnel! Please make sure that your code 
changes
   are covered with tests. And in case of new features or big changes
   remember to adjust the documentation.
   
   Feel free to ping committers for the review!
   
   ## Contribution Checklist
     - Make sure that the pull request corresponds to a [GITHUB 
issue](https://github.com/apache/seatunnel/issues).
     - Name the pull request in the form "[Feature] [component] Title of the 
pull request", where *Feature* can be replaced by `Hotfix`, `Bug`, etc.
     - Minor fixes should be named following this pattern: `[hotfix] [docs] Fix 
typo in README.md doc`.
   -->
   
   ### Purpose of this pull request
   
   <!-- Describe the purpose of this pull request. For example: This pull 
request adds checkstyle plugin.-->
   
   Add physical column pruning to Apache SeaTunnel's shared Parquet reader when 
`read_columns` selects a subset of top-level fields. Apply it to both the Avro 
reader and native Group fallback.
   
   Related issue: #12977
   
   No new options, dependencies or public APIs. Nested fields remain whole; 
nested-field pruning is outside this change.
   
   ### Does this PR introduce _any_ user-facing change?
   
   <!--
   Note that it means *any* user-facing change including all aspects such as 
the documentation fix.
   If yes, please clarify the previous behavior and the change this PR proposes 
- provide the console output, description and/or an example to show the 
behavior difference if possible.
   If possible, please also clarify if this is a user-facing change compared to 
the released SeaTunnel versions or within the unreleased branches such as dev.
   If no, write 'No'.
   If you are adding/modifying connector documents, please follow our new 
specifications: https://github.com/apache/seatunnel/issues/4544.
   -->
   
   Yes. With `read_columns = [id]`, the reader previously read unselected 
physical columns before returning only `id`. This change requests only the 
selected top-level fields, preserving output values and ordering.
   
   For example, a file containing an integer ID and a large unused binary 
payload still returns the same IDs, but no longer reads the unused payload 
column.
   
   Compatibility safeguards:
   
   - Explicit read schemas, Avro projections and configured record filters 
retain their existing read paths.
   - Empty/all-missing selections and all-column reads retain existing behavior.
   - Selected nested fields remain complete.
   - Existing output ordering, partition values, table IDs and split boundaries 
are preserved.
   - EN/ZH LocalFile documentation is updated.
   
   No intentional breaking changes or configuration migration.
   
   ### How was this patch tested?
   
   <!--
   If tests were added, say they were added here. Please make sure to add some 
test cases that check the changes thoroughly including negative and positive 
cases if possible.
   If it was tested in a way different from regular unit tests, please clarify 
how you tested step by step, ideally copy and paste-able, so that other 
reviewers can test and check, and descendants can verify in the future.
   If tests were not added, please describe why they were not added and/or why 
it was difficult to add.
   If you are adding E2E test cases, maybe refer to 
https://github.com/apache/seatunnel/blob/dev/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-cdc-mysql-e2e/src/test/resources/mysqlcdc_to_mysql.conf,
 here is a good example.
   -->
   
   Baseline: `9ab97e15f33cd1383c5216e50e77a2fe53d212c3`
   Candidate: `eb56896d57e4b2cfc9144b3e5d0d74312cdfda53`
   
   Added regression tests for both readers covering physical bytes read, 
full-column controls, reordered/missing fields, nested/logical/null values, 
splits, per-file schemas, explicit schema overrides, filters, metadata and 
configuration isolation.
   
   **Reproduction and measurements**
   
   The baseline returned the correct rows but failed the physical-I/O assertion 
because it still read the unselected payload column.
   
   Five paired runs used the same deterministic 128-row fixture, with an 
integer ID and a 32 KiB uncompressed, dictionary-disabled binary payload per 
row:
   
   - Avro projected read: **4,195,735 → 863 bytes**.
   - Native Group projected read: **4,196,080 → 1,208 bytes**.
   - All-column controls were unchanged on both revisions.
   - Every selected value and row order matched; ID checksum was 8128. 
Full-column controls also verified every payload byte.
   
   The counter measures filesystem bytes during the data-read call, after 
schema discovery. These are synthetic I/O measurements, not throughput, 
total-job-I/O or production-speedup claims.
   
   **Java 11 validation**
   
   - File-base verification: **370 tests passed**, including **30 Parquet 
tests**.
   - Compatibility tests cover predicates referencing unselected columns, 
explicit schemas, missing fields, metadata and configuration isolation.
   - LocalFile projection E2E: **four invocations passed**, zero 
failures/errors/skips, on Flink 1.18, Flink 1.20, Zeta and Spark 3.3.
   - Local engine validation used architecture-matched amd64 Java 11 images 
through image-selection-only test overrides. No reader, fixture, assertion or 
test-discovery implementation was replaced.
   - Scoped packaging, formatting and diff checks passed.
   - Independent correctness and security reviews found no remaining actionable 
findings.
   
   Focused commands, with Java 11 and compatible engine images:
   
   ```sh
   mvn -pl seatunnel-connectors-v2/connector-file/connector-file-base -am 
-DskipTests install
   
   mvn -pl seatunnel-connectors-v2/connector-file/connector-file-base verify
   
   TEST_IN_PR=true RUN_ALL_CONTAINER=false RUN_ZETA_CONTAINER=true 
RUN_ENGINES=all \
     mvn -pl :connector-file-local-e2e -am -DskipUT=true -DskipIT=false \
     '-Dit.test=LocalFileIT#testLocalFileParquetProjection' \
     -Dit.failIfNoSpecifiedTests=false -De2e.dependency.skip=false 
-Dskip.ui=true verify
   ```
   
   Full repository CI and representative workload-level throughput validation 
are not claimed. The scope and measurement limitations are recorded in #12977.
   
   No new connector or binary package is introduced. Existing connector 
mappings and packaging remain unchanged, and no incompatible-change entry is 
required.
   
   ### Check list
   
   * [ ] If any new Jar binary package adding in your PR, please add License 
Notice according
     [New License 
Guide](https://github.com/apache/seatunnel/blob/dev/docs/en/developer/new-license.md)
   * [x] If necessary, please update the documentation to describe the new 
feature. https://github.com/apache/seatunnel/tree/dev/docs
   * [ ] If necessary, please update `incompatible-changes.md` to describe the 
incompatibility caused by this PR.
   * [ ] If you are contributing the connector code, please check that the 
following files are updated:
     1. Update 
[plugin-mapping.properties](https://github.com/apache/seatunnel/blob/dev/plugin-mapping.properties)
 and add new connector information in it
     2. Update the pom file of 
[seatunnel-dist](https://github.com/apache/seatunnel/blob/dev/seatunnel-dist/pom.xml)
     3. Add ci label in 
[label-scope-conf](https://github.com/apache/seatunnel/blob/dev/.github/workflows/labeler/label-scope-conf.yml)
     4. Add e2e testcase in 
[seatunnel-e2e](https://github.com/apache/seatunnel/tree/dev/seatunnel-e2e/seatunnel-connector-v2-e2e/)
     5. Update connector 
[plugin_config](https://github.com/apache/seatunnel/blob/dev/config/plugin_config)


-- 
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]

Reply via email to