Skip to content

GH-3710: Tolerate unrecognized logical/physical type combinations when reading - #3711

Open
divjotarora wants to merge 3 commits into
apache:masterfrom
divjotarora:log-phys-type-combo
Open

GH-3710: Tolerate unrecognized logical/physical type combinations when reading#3711
divjotarora wants to merge 3 commits into
apache:masterfrom
divjotarora:log-phys-type-combo

Conversation

@divjotarora

@divjotarora divjotarora commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Rationale for this change

See apache/parquet-format#607 for rationale.

What changes are included in this PR?

This PR modifies parquet-java to gracefully handle unrecognized logical/physical type combinations by dropping the logical type during the read and dropping any associated statistics for the relevant columns. Note that unrecognized logical types are already handled gracefully and no changes were required.

Are these changes tested?

Yes, several unit tests added.

Are there any user-facing changes?

No.

Closes #3710

Comment thread parquet-column/src/main/java/org/apache/parquet/schema/Types.java Outdated
Comment thread parquet-column/src/main/java/org/apache/parquet/schema/Types.java

@emkornfield emkornfield left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think most important question is how we make this transition and an end-to-end test.

@divjotarora divjotarora left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@emkornfield I added an e2e test that reads a golden file with an INT32 column annotated with UUID. We can add this file to parquet-testing as part of this work as well.

Comment thread parquet-column/src/main/java/org/apache/parquet/schema/Types.java
Comment thread parquet-column/src/main/java/org/apache/parquet/schema/Types.java Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this just a place holder for the until the parquet testing file is merged?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I'll update the PR once that one is merged

protected PrimitiveType build(String name) {
try {
return validateAndBuild(name);
} catch (IllegalStateException e) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is possible to make this more specific? Also there is a general spec question on whether we should error for clearly invalid types (e.g. decimal with a precision that is too high on ints). This is probably also a spec level question.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point, I agree this should be scoped to only throwing on invalid combinations. Right now everything throws IllegalStateException so we can't distinguish at this level. I added a new UnsupportedLogicalTypeAnnotation exception to distinguish.

@emkornfield emkornfield left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main concern is on the breadth of the exception cast.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Specify handling for unrecognized logical/physical type combinations

2 participants