Skip to content

Columnar sinks beyond Parquet, and the gated protobuf representation reconciliations #17

Description

@jordepic

What

Two remaining pieces at the native↔host boundary. The nested-type transpose is done — the row↔Arrow converter carries ROW/ARRAY/MAP/VARBINARY (via Flink's own vendored Arrow machinery), so nested protobuf/Avro/JSON route today — and the Parquet columnar sink ships.

1. Columnar sinks beyond Parquet

The throughput end state for columnar workflows: a native columnar sink (and a columnar collect for SQL result fetching) consuming ArrowBatch directly, so a native source→…→sink pipeline pays no transpose at all, nested columns included. The transpose exists only to bridge to rowwise host operators — removing the rowwise edge removes the cost. This would also let the boundary read() be a true zero-copy view (today it deep-copies because the boundary operator releases the batch immediately). Currently only the Parquet sink is columnar; there is no ORC sink or columnar collect. Relates to the Iceberg/remote-endpoints issue.

2. Protobuf representation reconciliations (gated)

No longer boundary gaps — these are decode-semantics divergences between the descriptor-derived Arrow schema and Flink's PbToRowTypeUtil mapping, each gated to fallback until reconciled and parity-tested:

  • enum — int-vs-name, matched to the declared column type
  • unsigned / fixed ints — unsigned on the native side vs signed in Flink (a value divergence)
  • bytes — decode works and the boundary carries VARBINARY; only the byte[] parity-test comparison is missing
  • proto3 missing-field defaults
  • well-known types (google.protobuf.*) — dedicated Arrow type vs Flink's nested row

Also: Avro/JSON nested objects can now route through the boundary (same converter fix) — wire + parity-test when picked up.

Each item lifts a specific gate in docs/coverage-and-fallbacks.md; update it in the same commit.

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