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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions