Skip to content

Mark shredded_variant cases 41, 131, 132, 138 as INVALID (missing 'value' column)#117

Open
sdf-jkl wants to merge 1 commit into
apache:masterfrom
sdf-jkl:relabel-missing-value-cases
Open

Mark shredded_variant cases 41, 131, 132, 138 as INVALID (missing 'value' column)#117
sdf-jkl wants to merge 1 commit into
apache:masterfrom
sdf-jkl:relabel-missing-value-cases

Conversation

@sdf-jkl

@sdf-jkl sdf-jkl commented Jul 10, 2026

Copy link
Copy Markdown

Fixes #116

Rationale

These four cases omit the required value column from a variant group but are labeled as valid cases with expected outputs. Per the discussion in apache/parquet-format#591, the spec's requirement that the group contain a value field is intentional and will not be relaxed, so these files are not spec-compliant. The mislabeling has already propagated into implementations that run this corpus in CI (see apache/arrow-rs#10306).

case test omission
41 testArrayMissingValueColumn top-level value (typed_value is a LIST)
131 testMissingValueColumn top-level value (typed_value is INT32)
132 testShreddedObjectMissingFieldValueColumn value inside the shredded object field groups
138 testShreddedObjectMissingValueColumn top-level value (typed_value is an object)

Changes

Follows the existing convention used by cases 43, 84 and 125:

  • rename case-NNN.parquet / case-NNN_row-0.variant.bin to case-NNN-INVALID.parquet / case-NNN-INVALID_row-0.variant.bin
  • add a notes entry in cases.json stating the file is not valid according to the spec (with the reason) and that implementations can choose to error, or read the shredded value
  • keep the expected variant outputs for implementations that choose to read them

No file contents were changed, only renames and cases.json metadata.

🤖 Generated with Claude Code

…lue' column)

These cases omit the required 'value' column from a variant group
(cases 41, 131, 138 at the top level; case 132 in the shredded object
field groups) but were labeled as valid cases. Per the discussion in
apache/parquet-format#591, the spec requires the 'value' field to
always be present, so these files are not spec-compliant.

Relabel them following the existing convention used by cases 43, 84
and 125: '-INVALID' filenames plus a 'notes' entry stating that
implementations can choose to error or read the shredded value. The
expected variant outputs are kept for implementations that choose to
read them.

Fixes apache#116

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@sdf-jkl

sdf-jkl commented Jul 10, 2026

Copy link
Copy Markdown
Author

@alamb

@wgtmac

wgtmac commented Jul 11, 2026

Copy link
Copy Markdown
Member

Does this break existing CI of dependent projects if merged?

@sdf-jkl

sdf-jkl commented Jul 13, 2026

Copy link
Copy Markdown
Author

No. I checked the implementations I could find that use this corpus, and they either consume it as a git submodule (arrow-rs, arrow-go, arrow-dotnet, arrow-cpp, datafusion) or pin it to an explicit revision. iceberg-go pins a REF in gen_fixtures.sh, elasticsearch fetches from a pinned commit hash and excludes shredded_variant/ anyway, and parquet-go vendors a subset into its own testdata. For all of those, merging is a no-op until they choose to bump.

And when they bump, they are fine. -INVALID is an existing convention (cases 43, 84 and 125 already use it) that consumers key off generically rather than by case number. arrow-go skips any case whose parquet_file contains -INVALID and prints the notes (variant_test.go#L229), and arrow-dotnet does the same in its conformance suite. Both read the filenames from cases.json, which this PR updates in lockstep. No cases are added, removed or reordered, and no file contents change, so positional indexing into the array (as arrow-rs does) still works, and implementations that choose to leniently read the shredded value still can.

The one project I found that this does affect is hardwood. It shallow-clones parquet-testing master at HEAD (unpinned), enumerates shredded_variant/*.parquet by directory walk rather than from cases.json, and keys its skip-lists on exact filenames, so cases 41, 131 and 138 would stop being skipped. Small fix on their side, and I have opened an issue there: hardwood-hq/hardwood#783.

I cannot claim to have found every consumer. parquet-testing has no dependency graph, so this is not exhaustively enumerable. If any implementer pins to master, please shout.

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.

shredded_variant: cases 41, 131, 132, 138 omit the required 'value' column but are labeled as valid cases

2 participants