Skip to content

Track unknown logical type compatibility across Parquet implementations #599

Description

@kevinjqliu

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions