Skip to content

Arrow IPC export guide

Arrow IPC Schema and Record Batch Review: Separate Stream, File, and Batch Evidence

An Arrow IPC payload can be valid and still be the wrong stream, schema version, dictionary state, or file boundary for a comparison. Keep transport framing, batch shape, and application meaning as separate evidence.

Review an Arrow IPC export as a sequence of typed messages, not as an undifferentiated binary file. Record whether the artifact is a stream or a file, the schema message, dictionary batches, record-batch order, metadata, footer or end marker, and the format version. A successful reader open is not proof that every batch belongs to the same collection, that metadata is current, or that the values are licensed or accurate. Source dates shown here are documentation retrieval dates, checked 22 October 2026; original publication dates are not established.

Updated

On this page

Name the IPC boundary before reading values

Start with the artifact boundary: an Arrow IPC stream is consumed in order, while an IPC file provides a footer and block locations for random access. A file copied without its footer, a stream cut after a batch, or a concatenation of two streams can look like a reader error even when the underlying batches were individually valid. Preserve the original filename, byte length, first and last marker evidence, and the capture time as metadata rather than guessing from a reader exception.

The Apache Arrow, (opens in a new tab) documentation describes separate stream and file readers. That distinction is operational: a stream has one sequential message flow and a file has a footer that indexes blocks. Do not call a stream a file because its extension is arrow or feather, and do not use a file footer as evidence that a stream was complete.

Name the IPC boundary before reading values (table)
Boundary fieldRecordStop when
container_kindstream, file, or unknownThe kind is inferred only from a filename
capture_scopesingle export, shard, or concatenationThe source scope is not stated
start_evidencemagic, first message, or unavailableThe first bytes were stripped
end_evidenceend marker, footer, or unavailableThe copy ended before closure
format_versiondeclared IPC version and sourceOnly a library version is known
byte_extentlength and immutable artifact idLength changed during review

Compare schema and record batch shape

A record batch contains arrays that share a logical row count. Record the field order, field names, nested children, nullability, metadata, and the length of every batch. A schema that is textually similar can still change meaning when a timestamp timezone, decimal scale, list child, extension name, or dictionary index type changes. Preserve the full schema message or a redacted structural digest; a short column list is not enough to replay the interpretation.

The Apache Arrow, (opens in a new tab) format specification describes arrays with a type, buffers, length, null count, and optional dictionaries. That gives a useful review vocabulary, not a permission to inspect private values. Compare structure first, and keep unknown application semantics visible when the schema does not state units, code lists, or provenance.

Compare schema and record batch shape (table)
Shape checkEvidence to keepFailure meaning
field orderordered field pathsA consumer may bind by position
field typetype parameters and extension nameSame name does not mean same type
batch lengthrow count per batchBatch alignment is uncertain
null countdeclared count and observed stateNull bitmap may be incomplete
dictionary stateid, values, and replacement ruleLabels may resolve differently
metadatakey names, values, and sourceMetadata may describe another export

Treat dictionaries and metadata as state, not decoration

Dictionary encoding introduces a second piece of state: indexes in an array point to dictionary values. Record when a dictionary is introduced, which id it serves, whether a later dictionary replaces it, and which batches depend on that state. A value that prints as the same label in two readers can still come from different dictionary versions. If the dictionary is missing, do not silently replace indexes with a best guess.

Keep application metadata separate from format metadata. A key such as source, units, or release may be useful context, but its presence does not prove that the value was generated by that source or that the description is still current. Store metadata as observed, cite its source, and mark unverified claims as questions for the owner.

Dictionary and metadata questions

  • Which schema message establishes the dictionary index type and value type?
  • Does every dictionary id used by a batch have an observed definition before that use?
  • Is a dictionary replacement allowed by the chosen IPC container and version?
  • Which metadata keys describe the batch, and which describe the export process?
  • Can a reviewer distinguish absent metadata from an intentionally empty value?

Use a small synthetic message ledger

Before opening sensitive batches, test the review worksheet with invented field names and short values. The fixture below is a ledger, not an IPC parser. It exercises the order that a reviewer must account for and makes a missing dictionary, changed schema, or truncated end visible without copying a customer row. Keep the fixture in the review notes and keep the real payload outside a public worksheet.

Compare the expected message sequence with what the artifact manifest says. If the manifest records only a file size and a reader status, the result is incomplete. A reader can stop at a valid boundary while the capture is still missing a later batch or a footer.

Use a small synthetic message ledger (table)
Observed stateDispositionNext evidence
Schema first, all fields stablecontinueCompare batch lengths and null counts
Dictionary id used before definitionholdLocate the preceding dictionary message
Field metadata changed mid-streamholdVersion the schema boundary
Last batch has no end markerincompleteObtain the original stream or capture note
Footer indexes all file blockscontinueCheck block offsets and batch inventory

Synthetic IPC message ledger

Use a small synthetic message ledger code example, Plain text
artifact: ipc-fixture-01
container: stream
sequence: schema -> dictionary(3) -> record_batch(3) -> record_batch(2) -> end
schema: order_id:string, status:dictionary<int8>, amount:decimal(10,2)
dictionary(3): 0=queued, 1=sent, 2=failed
check: every batch has 3 fields and dictionary id 3 before status values

Make failures about evidence, not reader optimism

A successful open answers only whether one implementation accepted the bytes. It does not answer whether the capture is complete, whether the schema matches another export, or whether a field has the intended business definition. Report a narrow disposition such as schema mismatch, dictionary state unresolved, incomplete stream, footer unavailable, or application metadata unverified.

When comparing Arrow with Parquet, keep the question distinct. Parquet review focuses on file metadata, row groups, and partition evidence; IPC review focuses on message sequence, schema and dictionary state, record-batch boundaries, and stream versus file framing. Link to the Parquet metadata guide when a pipeline crosses formats, and record the conversion boundary rather than treating the two containers as interchangeable.

Make failures about evidence, not reader optimism (table)
FindingDispositionDo not infer
Schema differs in field type or timezonehold comparisonThat one file is corrupt
Batch lengths differ but schema matchesinvestigate capture scopeRows are duplicated
Dictionary state is incompletehold dependent labelsThe labels are obvious
Stream end marker absentmark incompleteThe last batch is final
Metadata is present but unverifiedretain as contextThe claimed source is proven

Close with a qualified preparation step

Once the IPC boundary, schema, dictionary state, batch inventory, and unresolved questions are recorded, keep the packet at structural evidence level. Do not paste raw batch values into a public request. Use the data provenance log for capture and transformation history and the data card template for collection context.

For a supported non-health collection, with authority to describe the artifact and a controlled handling boundary, the qualified appraisal path can be a next preparation step. It does not parse IPC files, certify a schema, create a quote, match a buyer, issue a legal opinion, or grant a license. Arrow format evidence also does not prove that the underlying values are accurate or permitted for a proposed use.

Takeaways

  • Identify stream versus file before interpreting a batch.
  • Keep schema, dictionary, record-batch, and metadata state separate.
  • Use a synthetic message ledger before exposing real values.
  • Report a narrow evidence disposition instead of treating reader success as completeness.
  • Carry format-conversion boundaries into any Parquet or table comparison.

Sources

  1. Apache Arrow: Arrow Columnar Format (opens in a new tab)
  2. Apache Arrow: Streaming, Serialization, and IPC (opens in a new tab)

Use the appraisal path after the technical packet is organized.

It does not parse files, certify evidence, create a quote, match a buyer, issue a legal opinion, or grant a license.