Skip to content

[Go] Add experimental Arrow Flight ingestion support#134

Merged
elenagaljak-db merged 5 commits intomainfrom
arrow_go
Mar 17, 2026
Merged

[Go] Add experimental Arrow Flight ingestion support#134
elenagaljak-db merged 5 commits intomainfrom
arrow_go

Conversation

@elenagaljak-db
Copy link
Contributor

What changes are proposed in this pull request?

Adds Arrow Flight ingestion to the Go SDK via new C FFI bindings into the Rust layer. The Go side serializes Arrow RecordBatches to IPC bytes, passes them zero-copy across the FFI boundary, and the
Rust SDK handles encoding, framing, and transmission over the Arrow Flight gRPC protocol.

  • New ZerobusArrowStream with IngestBatch, WaitForOffset, Flush, Close, and GetUnackedBatches
  • Configurable IPC compression (LZ4, Zstd)
  • http:// endpoints automatically disable TLS via NoTlsConfig (enables local server testing)
  • Integration tests with Arrow mock server
  • Example in examples/arrow/ and updated README/NEXT_CHANGELOG

How is this tested?

Existing tests and added test with mock server

@elenagaljak-db elenagaljak-db self-assigned this Mar 11, 2026
@elenagaljak-db elenagaljak-db linked an issue Mar 11, 2026 that may be closed by this pull request
@elenagaljak-db elenagaljak-db changed the title Add experimental Arrow Flight ingestion support in GO [Go] Add experimental Arrow Flight ingestion support Mar 12, 2026
go/arrow_ffi.go Outdated
Comment on lines +193 to +196
ipcCompression := opts.IPCCompression
if ipcCompression == 0 && opts.IPCCompression == 0 {
ipcCompression = d.IPCCompression
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As we define this:

const (
	// IPCCompressionNone disables Arrow IPC compression (default).
	IPCCompressionNone int32 = -1
	// IPCCompressionLZ4Frame enables LZ4 frame compression.
	IPCCompressionLZ4Frame int32 = 0
	// IPCCompressionZstd enables Zstandard compression.
	IPCCompressionZstd int32 = 1
)

wouldn't this mean that if user requests lz4 compression (as thats 0) will get reverted to using None (as thats the default value)?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Copy link
Contributor

@teodordelibasic-db teodordelibasic-db left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Signed-off-by: elenagaljak-db <elena.galjak@databricks.com>
Signed-off-by: elenagaljak-db <elena.galjak@databricks.com>
Signed-off-by: elenagaljak-db <elena.galjak@databricks.com>
Signed-off-by: elenagaljak-db <elena.galjak@databricks.com>
@elenagaljak-db elenagaljak-db added this pull request to the merge queue Mar 17, 2026
Merged via the queue into main with commit b129c9a Mar 17, 2026
15 checks passed
@elenagaljak-db elenagaljak-db deleted the arrow_go branch March 17, 2026 13:39
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.

[Go] Add experimental Arrow Flight support

3 participants