Background
Parquet classifies new logical types as forward compatible:
"New logical types are considered forward compatible despite the loss of semantic meaning."
-- https://parquet.apache.org/docs/file-format/versions/#compatibility-categories
Readers that do not recognize a logical type should still read the underlying physical representation rather than reject the file.
This is increasingly important for VARIANT, GEOMETRY, GEOGRAPHY, and future logical types.
Related discussion:
Golden test files from parquet-testing
| File |
Purpose |
unknown-logical-type.parquet |
File containing an unknown logical type |
case-001.parquet |
File containing the VARIANT logical type. Readers that do not recognize the VARIANT logical type should treat it as an unknown logical type. |
Expected behavior:
- File metadata and schema can be parsed.
- Underlying physical data can be read.
- Unsupported logical semantics are ignored.
- The reader does not fail solely because the logical type is unknown.
Compatibility status (updated as of July 20, 2026)
Implementation list from https://parquet.apache.org/docs/file-format/implementationstatus/
| Implementation |
Version tested |
unknown-logical-type.parquet |
case-001.parquet (VARIANT) |
Issue / PR |
| parquet-java |
1.17.0 |
❌ Unknown types: #2709 (open; no fix PR) [1] ✅ |
✅ VARIANT: #3072 (merged in 1.16.0) |
❌ Older-reader VARIANT: #3633 (open) [2] ✅ Fixed in apache/parquet-java#3669, should be available in 1.18.x |
| Apache Arrow C++ |
25.0.0 |
✅ Unknown types: #41764 / #41765 |
✅ VARIANT: #45937, #50121, #50122, #50232 |
✅ |
| Apache Arrow Rust (arrow-rs) |
59.1.0 |
✅ Unknown types: #8776 / #8777 |
✅ VARIANT: #6736, #8408, #8480 |
✅ |
| Apache Arrow Go |
18.6.0 / main (f7bacb4) |
❌ Unknown types: no Arrow Go issue/PR found; related upstream #41764 / #41765 |
✅ VARIANT: #310, #352, #433, #434, #455 |
❌ |
| DuckDB |
v1.5.4 |
✅ Unknown types: #16378 |
✅ VARIANT support: #18187, #18224, #18996 |
✅ |
| Polars |
1.42.1 |
❌ Unknown types: fails during footer metadata parsing; no exact issue/PR (related #20978) |
❌ VARIANT: fails during footer metadata parsing; no exact issue/PR (related #20978, analogous #27893 / #27896) |
❌ |
| cuDF |
26.06.01 |
✅ Unknown types: existing skip/fallback behavior documented in #22310 / 893daed |
✅ VARIANT: #22312, #22310, #22416 |
✅ |
| Hyparquet |
1.26.2 |
✅ Unknown types: 8a98407 / 892c933 |
✅ VARIANT: #149, 6290e85, 45a7d5e |
✅ |
[1] Fails during footer schema conversion, before projection or decoding. This is inconsistent with Parquet's forward-compatibility expectation for unknown logical annotations.
[2] Pre-1.16 versions do not understand VARIANT, so it behaves like an unknown logical type and fails during footer conversion, even if unprojected.
Completion criteria
- Record results and tested versions for each implementation.
- Open upstream issues for failures.
- Add regression tests using the shared
parquet-testing files.
- Backport fixes where practical.
Background
Parquet classifies new logical types as forward compatible:
-- https://parquet.apache.org/docs/file-format/versions/#compatibility-categories
Readers that do not recognize a logical type should still read the underlying physical representation rather than reject the file.
This is increasingly important for
VARIANT,GEOMETRY,GEOGRAPHY, and future logical types.Related discussion:
parquet-javareader (1.15.2) failed to read a Parquet file containing the newerVARIANTlogical type. The reader rejected the file instead of ignoring the unknown logical annotation and exposing the underlying physical representation.Golden test files from
parquet-testingunknown-logical-type.parquetcase-001.parquetVARIANTlogical type. Readers that do not recognize the VARIANT logical type should treat it as an unknown logical type.Expected behavior:
Compatibility status (updated as of July 20, 2026)
Implementation list from https://parquet.apache.org/docs/file-format/implementationstatus/
unknown-logical-type.parquetcase-001.parquet(VARIANT)❌ Unknown types: #2709 (open; no fix PR) [1]✅
❌ Older-reader VARIANT: #3633 (open) [2]✅ Fixed in apache/parquet-java#3669, should be available in 1.18.x
f7bacb4)893daed8a98407/892c9336290e85,45a7d5e[1] Fails during footer schema conversion, before projection or decoding. This is inconsistent with Parquet's forward-compatibility expectation for unknown logical annotations.
[2] Pre-1.16 versions do not understand VARIANT, so it behaves like an unknown logical type and fails during footer conversion, even if unprojected.
Completion criteria
parquet-testingfiles.