OptionalbatchSplit the table into record batches of this many rows (default: one batch).
OptionalcolumnsSubset of columns to write, in order.
Optionalformat'stream' (default; what DuckDB insertArrowFromIPCStream / pl.read_ipc_stream expect) or 'file' (Feather v2, random access).
Apache Arrow IPC — the real thing, not
ArrowLike.toArrowIpc()writes the Arrow IPC streaming format (or the file format, a.k.a. Feather v2) andfromArrowIpc()reads both. The bytes are whatapache-arrow'stableFromIPC, DuckDB(-Wasm)'sinsertArrowFromIPCStream, pyarrow'sipc.open_stream / open_file, Polars'read_ipc_stream / read_ipcand pandas'read_featherconsume, and what they produce is what this reader takes. No dependency: the FlatBuffers encoding of the Schema / RecordBatch / DictionaryBatch messages is small enough to write by hand (the reference-style back-to-front builder below) and the interop suite pins it againstapache-arrow.Type mapping (columna → Arrow): f64 → Float64, f32 → Float32, i32 → Int32, u32 → UInt32, bool → Bool, utf8 → Utf8, category → Dictionary<Int32, Utf8>, datetime → Timestamp(MILLISECOND). Arrow → columna additionally accepts Int8/16/64 and UInt8/16/64 (64-bit → f64, exact below 2^53), Float16 (→ f32), LargeUtf8 and Utf8View (the string layout Polars ≥ 1.0 and DuckDB emit), Timestamp in any unit and Date32/Date64 (→ datetime, milliseconds), Null (→ all-null f64) and dictionary-encoded strings with any index width. Nested, decimal, binary, interval and compressed batches are refused with the field name in the error rather than decoded wrongly.