Skip to content

Parquet: Fix decimal and UUID filter pushdown conversion#16621

Open
alexandrefimov wants to merge 1 commit into
apache:mainfrom
alexandrefimov:fix-parquet-decimal-uuid-filter-pushdown
Open

Parquet: Fix decimal and UUID filter pushdown conversion#16621
alexandrefimov wants to merge 1 commit into
apache:mainfrom
alexandrefimov:fix-parquet-decimal-uuid-filter-pushdown

Conversation

@alexandrefimov
Copy link
Copy Markdown

This fixes Parquet filter pushdown conversion for decimal and UUID predicates.

Changes:

  • Use the Parquet MessageType when building the pushed Parquet filter so decimal predicates use the actual physical primitive type.
  • Convert decimal literals for INT32, INT64, BINARY, and FIXED_LEN_BYTE_ARRAY encodings.
  • Use the actual fixed-length byte array length for fixed decimal predicates.
  • Fall back to NOOP when decimal literals cannot be represented safely at the file schema scale/precision.
  • Convert Parquet UUID logical type back to Iceberg UUIDType so UUID predicates bind correctly.

Tests:

  • ./gradlew :iceberg-parquet:spotlessCheck :iceberg-parquet:test

Closes #16035

@alexandrefimov alexandrefimov force-pushed the fix-parquet-decimal-uuid-filter-pushdown branch from 113c045 to 5c3405b Compare May 31, 2026 16:04
@alexandrefimov
Copy link
Copy Markdown
Author

This is ready for review.

For context, this picks up the work from #16051, which was closed as stale.
Thanks @laserninja for the original report and PR.

This version keeps the same issue scope but also uses the Parquet physical type when converting decimal literals, covers INT32/INT64/BINARY/FIXED_LEN_BYTE_ARRAY decimal encodings, and adds UUID logical type conversion coverage.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Parquet: Filter pushdown throws UnsupportedOperationException for decimal and UUID predicates

1 participant