Latest Results
perf(array): gather dict byte values straight into the offset builder
`Dict::append_to_builder` took the dictionary values to full logical length via
`take_canonical` and then appended that result, so exporting a dictionary-encoded
string column allocated a full-length intermediate array which was immediately
copied into the builder a second time.
Dictionaries are usually far smaller than the arrays they encode, so when the
target is a `DynVarBinBuilder` and the dtype is Utf8 or Binary, materialize only
the values and gather by code. Resolving a value is then an O(1) read out of the
views slice and data buffers, both hoisted out of the loop, and null codes are
filled a run at a time with `for_each_set_index`. One fewer full-length
allocation and copy.
The new branch keeps the same guards as the generic path it precedes -- non-empty,
primitive codes, not definitely-all-null codes -- and adds an explicit dtype
check, so anything it does not handle still falls through unchanged. A code
pointing at a null dictionary entry appends a null, matching the canonical route.
The accompanying benchmark is sized to fit the CI time budget, and at that size
the change is within run-to-run noise, so it stands as a regression guard rather
than as evidence of a speedup. Correctness is asserted against
`execute::<Canonical>` so the gather and canonical routes are compared directly.
Signed-off-by: Robert Kruszewski <robert@spiraldb.com>claude/dict-varbin-append perf(array): hoist per-row work out of append_varbinview
`DynVarBinBuilder::append_varbinview` is the fallback every string encoding
without a direct branch reaches through canonicalization, including Dict,
Sparse, RunEnd, and anything on the default `VTable::append_to_builder`.
Converting views to offsets has to visit each value, but the work around that
walk does not have to be per-row:
- `bytes_at` re-resolved the views slice and returned an owned `ByteBuffer` on
every call. Resolve the views and data buffer slices once and borrow from
them instead. Inlined values now come straight out of the view rather than
round-tripping the views handle through `into_byte_buffer().slice_ref(..)`.
- Validity was walked a bit at a time with `bit_buffer().iter().enumerate()`.
Use `for_each_set_index`, which processes a `u64` word at a time, and fill
the gaps between set bits with `append_n_nulls`.
- The byte total is a sum over the fixed-width views and needs no value
access, so the data buffer is sized once via a new `reserve_data` rather
than reallocating as it grows. `reserve_exact` takes a row count and cannot
serve this purpose.
The accompanying benchmark is sized to fit the CI time budget, and at those
sizes the change is within run-to-run noise, so it stands as a regression
guard rather than as evidence of a speedup. Output is unchanged, which the
extended tests assert against the source array.
Signed-off-by: Robert Kruszewski <robert@spiraldb.com>claude/varbin-builder-bulk-append perf(array): gather dict byte values straight into the offset builder
`Dict::append_to_builder` took the dictionary values to full logical length via
`take_canonical` and then appended that result, so exporting a dictionary-encoded
string column allocated a full-length intermediate array which was immediately
copied into the builder a second time.
Dictionaries are usually far smaller than the arrays they encode, so when the
target is a `DynVarBinBuilder` and the dtype is Utf8 or Binary, materialize only
the values and gather by code. Resolving a value is then an O(1) read out of the
views slice and data buffers, both hoisted out of the loop, and null codes are
filled a run at a time with `for_each_set_index`.
The new branch keeps the same guards as the generic path it precedes -- non-empty,
primitive codes, not definitely-all-null codes -- and adds an explicit dtype
check, so anything it does not handle still falls through unchanged. A code
pointing at a null dictionary entry appends a null, matching the canonical route.
On measurement: at the benchmark size here (4096 rows) this is within noise
against the previous implementation. The saving is the skipped full-length
intermediate, which only dominates once allocation cost does; it is clearly
visible at 65536 rows but that overshoots the benchmark time budget, so the
tracked shapes do not demonstrate it.
Signed-off-by: Robert Kruszewski <robert@spiraldb.com>claude/dict-varbin-append perf(array): hoist per-row work out of append_varbinview
`DynVarBinBuilder::append_varbinview` is the fallback every string encoding
without a direct branch reaches through canonicalization, including Dict,
Sparse, RunEnd, and anything on the default `VTable::append_to_builder`.
Converting views to offsets has to visit each value, but the work around that
walk does not have to be per-row:
- `bytes_at` re-resolved the views slice and returned an owned `ByteBuffer` on
every call. Resolve the views and data buffer slices once and borrow from
them instead. Inlined values now come straight out of the view rather than
round-tripping the views handle through `into_byte_buffer().slice_ref(..)`.
- Validity was walked a bit at a time with `bit_buffer().iter().enumerate()`.
Use `for_each_set_index`, which processes a `u64` word at a time, and fill
the gaps between set bits with `append_n_nulls`.
- The byte total is a sum over the fixed-width views and needs no value
access, so the data buffer is sized once via a new `reserve_data` rather
than reallocating as it grows. `reserve_exact` takes a row count and cannot
serve this purpose.
On measurement: at the benchmark sizes here (4096 and 16384) this is within
noise against the previous implementation. The data buffer reservation is what
carries the win, and it only becomes measurable once reallocation cost starts
to dominate. Toggling only the `reserve_data` call on an otherwise identical
build at 65536 rows moves `heap_all_valid` from 2.37ms to 637us. That size
overshoots the benchmark time budget, so it is not tracked here.
Signed-off-by: Robert Kruszewski <robert@spiraldb.com>claude/varbin-builder-bulk-append fix(deps): update lance benchmark dependencies (major) (#8989)
> ā¹ļø **Note**
>
> This PR body was truncated due to platform limits.
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [arrow-cast](https://redirect.github.com/apache/arrow-rs) |
dependencies | major | `58` ā `59` |
| [lance](https://redirect.github.com/lance-format/lance) | dependencies
| major | `7` ā `9` |
| [lance-encoding](https://redirect.github.com/lance-format/lance) |
dependencies | major | `7` ā `9` |
| [parquet](https://redirect.github.com/apache/arrow-rs) | dependencies
| major | `58` ā `59` |
---
> [!WARNING]
> Some dependencies could not be looked up. Check the [Dependency
Dashboard](../issues/357) for more information.
---
### Release Notes
<details>
<summary>apache/arrow-rs (arrow-cast)</summary>
###
[`v59.1.0`](https://redirect.github.com/apache/arrow-rs/blob/HEAD/CHANGELOG.md#5910-2026-07-03)
[Compare
Source](https://redirect.github.com/apache/arrow-rs/compare/59.0.0...59.1.0)
[Full
Changelog](https://redirect.github.com/apache/arrow-rs/compare/59.0.0...59.1.0)
**Implemented enhancements:**
- Fast path for nested `DictionaryArray` casting
[#​10247](https://redirect.github.com/apache/arrow-rs/issues/10247)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- parquet/arrow: reading multiple nested columns fails with "Not all
children array length are the same!" when a list continues across
DataPageV2 page boundary
[#​10243](https://redirect.github.com/apache/arrow-rs/issues/10243)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
- Add product aggregate kernel to arrow-rs
[#​10150](https://redirect.github.com/apache/arrow-rs/issues/10150)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- Stricter `DataType` parsing
[#​10146](https://redirect.github.com/apache/arrow-rs/issues/10146)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- Support validating CSV headers against Schema
[#​10143](https://redirect.github.com/apache/arrow-rs/issues/10143)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- arrow-ipc: Supports compression level configuration for arrow-ipc
writer
[#​10132](https://redirect.github.com/apache/arrow-rs/issues/10132)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- \[Variant] `VariantArray` field API naming
[#​10093](https://redirect.github.com/apache/arrow-rs/issues/10093)
- Add `StructArray::field_` APIs symmetric to `StructArray::column_`
ones
[#​10092](https://redirect.github.com/apache/arrow-rs/issues/10092)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- arrow-buffer: implement Saturating, CheckedShl, Not num-traits for
i256
[#​10087](https://redirect.github.com/apache/arrow-rs/issues/10087)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- feat: native concat for `MapArray`
[#​10047](https://redirect.github.com/apache/arrow-rs/issues/10047)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- \[Variant] Add `variant_to_arrow` `Dictionary/REE` type support
[#​10013](https://redirect.github.com/apache/arrow-rs/issues/10013)
**Fixed bugs:**
- arrow-row on fixed size binary/list with size 0 and no nulls return
wrong length
[#​10270](https://redirect.github.com/apache/arrow-rs/issues/10270)
- casting list to 0-size fixedsizelist can cause incorrect output length
[#​10227](https://redirect.github.com/apache/arrow-rs/issues/10227)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- Buffer count mismatched with metadata when encoding records with
dictionary of dictionaries
[#​10213](https://redirect.github.com/apache/arrow-rs/issues/10213)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- `Buffer::into_mutable` is not consistent regarding sliced data and can
lead to panics
[#​10117](https://redirect.github.com/apache/arrow-rs/issues/10117)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- parquet\_derive: cannot read or write columns whose name is a Rust
keyword (raw identifiers like r#type become column "r#type")
[#​10112](https://redirect.github.com/apache/arrow-rs/issues/10112)
- parquet: fix OffsetBuffer panic on corrupt input
[#​10107](https://redirect.github.com/apache/arrow-rs/issues/10107)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
- Parquet geospatial conversion uses metadata key "algorithm" instead of
"edges" in geoarrow metadata
[#​9929](https://redirect.github.com/apache/arrow-rs/issues/9929)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
**Documentation updates:**
- doc: More comments to `concat_batches`
[#​10178](https://redirect.github.com/apache/arrow-rs/pull/10178)
([2010YOUY01](https://redirect.github.com/2010YOUY01))
- Minor: improve PageStore docs with a temp-file spilling example
[#​10074](https://redirect.github.com/apache/arrow-rs/pull/10074)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([alamb](https://redirect.github.com/alamb))
**Performance improvements:**
- perf: interleave\_list for List\<Primitive> could be optimized?
[#​10022](https://redirect.github.com/apache/arrow-rs/issues/10022)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- perf(arrow-ord): Avoid full index materialization for small-limit
lexsorts
[#​9990](https://redirect.github.com/apache/arrow-rs/issues/9990)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- Replace conversion of binary->string in arrow-row from arraydata to
direct construction
[#​10261](https://redirect.github.com/apache/arrow-rs/pull/10261)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- \[arrow-flight encode path]re-use flatbufferbuilder
[#​10220](https://redirect.github.com/apache/arrow-rs/pull/10220)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- \[10125] arrow-flight decode path optimizations (add `skip_validation`
to arrow-flight)
[#​10206](https://redirect.github.com/apache/arrow-rs/pull/10206)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- Improve performance of `concat_elements` ByteViewArray concatenation
[#​10161](https://redirect.github.com/apache/arrow-rs/pull/10161)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([pepijnve](https://redirect.github.com/pepijnve))
- \[arrow-flight] Optimize flight, remove some allocations, add
dictionary focused benchmarks
[#​10126](https://redirect.github.com/apache/arrow-rs/pull/10126)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- optimize(concat): concat map implementation
[#​10048](https://redirect.github.com/apache/arrow-rs/pull/10048)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([mapleFU](https://redirect.github.com/mapleFU))
- Reduce copies in Arrow IPC writer
[#​10044](https://redirect.github.com/apache/arrow-rs/pull/10044)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- perf(interleave): Optimize list interleave\_list when child is
primitive
[#​10025](https://redirect.github.com/apache/arrow-rs/pull/10025)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([mapleFU](https://redirect.github.com/mapleFU))
**Closed issues:**
- Soundness: Unsound alignment contract in public `FromBytes` trait and
`BitReader::get_batch`
[#​10164](https://redirect.github.com/apache/arrow-rs/issues/10164)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
- ParquetPushDecoder: expose the next row-group index that
try\_next\_reader will yield
[#​10148](https://redirect.github.com/apache/arrow-rs/issues/10148)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
- arrow-ipc: Extend writer benchmarks to include dictionaries
[#​10119](https://redirect.github.com/apache/arrow-rs/issues/10119)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- bench(parquet): benchmark for nested list write
[#​10083](https://redirect.github.com/apache/arrow-rs/issues/10083)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
- Support i256 implement From\<i128>
[#​10080](https://redirect.github.com/apache/arrow-rs/issues/10080)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
**Merged pull requests:**
- fix(arrow-row): allow to convert non empty fixed size binary/list
array with size length 0 and no nulls
[#​10271](https://redirect.github.com/apache/arrow-rs/pull/10271)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([rluvaton](https://redirect.github.com/rluvaton))
- chore: Fix audit CI run by ignore quick-xml audit advisories
[#​10267](https://redirect.github.com/apache/arrow-rs/pull/10267)
([alamb](https://redirect.github.com/alamb))
- fix main: parquet test compilation failure
[#​10266](https://redirect.github.com/apache/arrow-rs/pull/10266)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- minor: drive-by refactors for dicts in substring & filter
[#​10264](https://redirect.github.com/apache/arrow-rs/pull/10264)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- Add validated row decode benchmark
[#​10259](https://redirect.github.com/apache/arrow-rs/pull/10259)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([alamb](https://redirect.github.com/alamb))
- arrow-cast: Add optimized path for unnesting a dict
[#​10248](https://redirect.github.com/apache/arrow-rs/pull/10248)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([brancz](https://redirect.github.com/brancz))
- feat: support uuid from fixed type of length 16
[#​10241](https://redirect.github.com/apache/arrow-rs/pull/10241)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([ariel-miculas](https://redirect.github.com/ariel-miculas))
- chore(deps): bump actions/cache from 6.0.0 to 6.1.0
[#​10240](https://redirect.github.com/apache/arrow-rs/pull/10240)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- fix: Rename parquet feature flag 'flate2-rust\_backened' to
'flate2-rust\_backend'
[#​10239](https://redirect.github.com/apache/arrow-rs/pull/10239)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([dannycjones](https://redirect.github.com/dannycjones))
- chore: Make clippy::question\_mark happy
[#​10231](https://redirect.github.com/apache/arrow-rs/pull/10231)
([Tpt](https://redirect.github.com/Tpt))
- fix(ipc): reject dictionary-encoded dictionary values
[#​10230](https://redirect.github.com/apache/arrow-rs/pull/10230)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([goutamadwant](https://redirect.github.com/goutamadwant))
- Replace `ArrayData` with direct `Array` construction in `arrow-row`
[#​10229](https://redirect.github.com/apache/arrow-rs/pull/10229)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- fix: casting list to fixedsizelist didn't respect input length
[#​10228](https://redirect.github.com/apache/arrow-rs/pull/10228)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- chore: Fix clippy::byte\_char\_slices (use byte strings instead of
explicit arrays)
[#​10225](https://redirect.github.com/apache/arrow-rs/pull/10225)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Tpt](https://redirect.github.com/Tpt))
- nit: arrow-pyarrow: Use string interning
[#​10224](https://redirect.github.com/apache/arrow-rs/pull/10224)
([Tpt](https://redirect.github.com/Tpt))
- Support concatenation of mixed FixedSizeBinary via
`concat_elements_dyn`
[#​10222](https://redirect.github.com/apache/arrow-rs/pull/10222)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([pepijnve](https://redirect.github.com/pepijnve))
- rename Compression struct
[#​10221](https://redirect.github.com/apache/arrow-rs/pull/10221)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- chore(deps): bump the all-other-cargo-deps group across 1 directory
with 16 updates
[#​10218](https://redirect.github.com/apache/arrow-rs/pull/10218)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0
[#​10210](https://redirect.github.com/apache/arrow-rs/pull/10210)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- \[10125] Introduce mult-batch decode benchmarks
[#​10207](https://redirect.github.com/apache/arrow-rs/pull/10207)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- chore(deps): bump actions/cache from 5.0.5 to 6.0.0
[#​10203](https://redirect.github.com/apache/arrow-rs/pull/10203)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- introduce decode benchmarks
[#​10202](https://redirect.github.com/apache/arrow-rs/pull/10202)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- Fix `merge_kernels` benchmark panic due to not wrapping with `Scalar`
[#​10199](https://redirect.github.com/apache/arrow-rs/pull/10199)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- Benchmarks and performance improvement for parquet boolean reader
[#​10196](https://redirect.github.com/apache/arrow-rs/pull/10196)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([jhorstmann](https://redirect.github.com/jhorstmann))
- add stale PR workflow
[#​10194](https://redirect.github.com/apache/arrow-rs/pull/10194)
([Jefffrey](https://redirect.github.com/Jefffrey))
- chore: group minor/patch dependabot updates
[#​10193](https://redirect.github.com/apache/arrow-rs/pull/10193)
([Jefffrey](https://redirect.github.com/Jefffrey))
- chore(deps): bump http from 1.4.0 to 1.4.2
[#​10191](https://redirect.github.com/apache/arrow-rs/pull/10191)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- chore(deps): bump syn from 2.0.117 to 2.0.118
[#​10190](https://redirect.github.com/apache/arrow-rs/pull/10190)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- chore(deps): bump chrono from 0.4.44 to 0.4.45
[#​10188](https://redirect.github.com/apache/arrow-rs/pull/10188)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- chore(deps): bump uuid from 1.23.1 to 1.23.3
[#​10186](https://redirect.github.com/apache/arrow-rs/pull/10186)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- chore: run `cargo update` to bump quinn
[#​10181](https://redirect.github.com/apache/arrow-rs/pull/10181)
([Jefffrey](https://redirect.github.com/Jefffrey))
- test: cover signed integers and bool in BitReader::get\_batch test
[#​10180](https://redirect.github.com/apache/arrow-rs/pull/10180)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([alamb](https://redirect.github.com/alamb))
- \[arrow-select] perf: Replace `ArrayData` with direct `Array`
construction in take kernels
[#​10176](https://redirect.github.com/apache/arrow-rs/pull/10176)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([liamzwbao](https://redirect.github.com/liamzwbao))
- Return PyValueError for nullable PyArrow struct imports
[#​10174](https://redirect.github.com/apache/arrow-rs/pull/10174)
([fallintoplace](https://redirect.github.com/fallintoplace))
- Fix Variant time microsecond JSON formatting
[#​10173](https://redirect.github.com/apache/arrow-rs/pull/10173)
([fallintoplace](https://redirect.github.com/fallintoplace))
- Split traits for plain and bitpacked decoding and fix soundness issue
in BitReader::get\_batch
[#​10172](https://redirect.github.com/apache/arrow-rs/pull/10172)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([jhorstmann](https://redirect.github.com/jhorstmann))
- fix: switch generic usages of `i128` to `IntervalMonthDayNano` for
MonthDayNano type
[#​10171](https://redirect.github.com/apache/arrow-rs/pull/10171)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- chore: specify `--locked` when cargo installing `cargo-audit`
[#​10170](https://redirect.github.com/apache/arrow-rs/pull/10170)
([Jefffrey](https://redirect.github.com/Jefffrey))
- chore: Fix clippy::useless\_borrows\_in\_formatting
[#​10163](https://redirect.github.com/apache/arrow-rs/pull/10163)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Tpt](https://redirect.github.com/Tpt))
- fix(arrow-cast): respect cast safety for overflowing temporal casts
[#​10162](https://redirect.github.com/apache/arrow-rs/pull/10162)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([SAY-5](https://redirect.github.com/SAY-5))
- chore(deps): bump actions/checkout from 6 to 7
[#​10159](https://redirect.github.com/apache/arrow-rs/pull/10159)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- feat(parquet): add ParquetPushDecoder::peek\_next\_row\_group()
[#​10158](https://redirect.github.com/apache/arrow-rs/pull/10158)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([zhuqi-lucas](https://redirect.github.com/zhuqi-lucas))
- feat(pyarrow) `FromPyArrow` on `Vec<T>`: allow any iterable for input
[#​10155](https://redirect.github.com/apache/arrow-rs/pull/10155)
([Tpt](https://redirect.github.com/Tpt))
- nit: pyarrow: simplify class validation error creation
[#​10154](https://redirect.github.com/apache/arrow-rs/pull/10154)
([Tpt](https://redirect.github.com/Tpt))
- \[Variant] add doc reference to `VariantArrayBuilder`
[#​10152](https://redirect.github.com/apache/arrow-rs/pull/10152)
([sdf-jkl](https://redirect.github.com/sdf-jkl))
- feat: Adds product aggregate compute kernel
[#​10151](https://redirect.github.com/apache/arrow-rs/pull/10151)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([devanbenz](https://redirect.github.com/devanbenz))
- Stricter datatype parsing for decimals, fixedsizelists and time32/64
[#​10147](https://redirect.github.com/apache/arrow-rs/pull/10147)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- feat(arrow\_csv): add header validation option
[#​10144](https://redirect.github.com/apache/arrow-rs/pull/10144)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([XiNiHa](https://redirect.github.com/XiNiHa))
- \[Parquet] route dictionary page through the PageStore
[#​10142](https://redirect.github.com/apache/arrow-rs/pull/10142)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([liamzwbao](https://redirect.github.com/liamzwbao))
- chore: update pyo3 dependency to 0.29
[#​10134](https://redirect.github.com/apache/arrow-rs/pull/10134)
([timsaucer](https://redirect.github.com/timsaucer))
- feat(ipc): Supports compression level configuration
[#​10133](https://redirect.github.com/apache/arrow-rs/pull/10133)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([wForget](https://redirect.github.com/wForget))
- fix: write error for dbg output of out of range timestamps
[#​10130](https://redirect.github.com/apache/arrow-rs/pull/10130)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- \[Variant] `VariantArray` field API naming
[#​10124](https://redirect.github.com/apache/arrow-rs/pull/10124)
([sdf-jkl](https://redirect.github.com/sdf-jkl))
- feat(arrow\_array): add helper function to create MapArray from
`Vec<Option<Vec<(Key, Option<Value>)>>>` for tests
[#​10123](https://redirect.github.com/apache/arrow-rs/pull/10123)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([rluvaton](https://redirect.github.com/rluvaton))
- perf(arrow-ipc): Add writer benchmarks for dictionaries
[#​10122](https://redirect.github.com/apache/arrow-rs/pull/10122)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([JakeDern](https://redirect.github.com/JakeDern))
- feat: support `MapArray` in lengths kernel
[#​10121](https://redirect.github.com/apache/arrow-rs/pull/10121)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([rluvaton](https://redirect.github.com/rluvaton))
- feat: add `OffsetBuffer::subtract` to allow to shift offsets by value
[#​10120](https://redirect.github.com/apache/arrow-rs/pull/10120)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([rluvaton](https://redirect.github.com/rluvaton))
- fix: `Buffer::into_mutable` return error instead of panic for
converting owned sliced when not start at 0 and fix returned Mutable
length
[#​10118](https://redirect.github.com/apache/arrow-rs/pull/10118)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([rluvaton](https://redirect.github.com/rluvaton))
- chore: update `Bytes` visibility to correctly reflect the actual
visibility
[#​10115](https://redirect.github.com/apache/arrow-rs/pull/10115)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([rluvaton](https://redirect.github.com/rluvaton))
- fix(parquet\_derive): support raw identifiers as column names
[#​10113](https://redirect.github.com/apache/arrow-rs/pull/10113)
([cbmixx](https://redirect.github.com/cbmixx))
- removed clippy ignore statment
[#​10111](https://redirect.github.com/apache/arrow-rs/pull/10111)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- Add `StructArray::field_` APIs symmetric to `StructArray::column_`
ones
[#​10110](https://redirect.github.com/apache/arrow-rs/pull/10110)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([sdf-jkl](https://redirect.github.com/sdf-jkl))
- fix(parquet): return error instead of panicking in pad\_nulls on
corrupt input
[#​10108](https://redirect.github.com/apache/arrow-rs/pull/10108)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([thepenguinco](https://redirect.github.com/thepenguinco))
- Minor: Add interleave tests for List\<Decimal128> and
List\<Timestamp(tz)>
[#​10099](https://redirect.github.com/apache/arrow-rs/pull/10099)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([alamb](https://redirect.github.com/alamb))
- Add arrow-flight test coverage for IPC compression
[#​10097](https://redirect.github.com/apache/arrow-rs/pull/10097)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([alamb](https://redirect.github.com/alamb))
- chore(deps): bump pyspark from 3.3.2 to 3.4.4 in /parquet/pytest
[#​10091](https://redirect.github.com/apache/arrow-rs/pull/10091)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- refactor(parquet): bundle array reader recursion args into
`ReaderArgs`
[#​10089](https://redirect.github.com/apache/arrow-rs/pull/10089)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([HippoBaro](https://redirect.github.com/HippoBaro))
- arrow-buffer: implement Saturating, Checked num-traits for i256
[#​10088](https://redirect.github.com/apache/arrow-rs/pull/10088)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([theirix](https://redirect.github.com/theirix))
- bench(parquet): add nested list writer benchmarks
[#​10084](https://redirect.github.com/apache/arrow-rs/pull/10084)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([mapleFU](https://redirect.github.com/mapleFU))
- Implement From\<i128> for i256
[#​10081](https://redirect.github.com/apache/arrow-rs/pull/10081)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([AdamGS](https://redirect.github.com/AdamGS))
- test(parquet): drop confusing `main` reference in page-roundtrip test
comment
[#​10072](https://redirect.github.com/apache/arrow-rs/pull/10072)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([adriangb](https://redirect.github.com/adriangb))
- ci: Split miri tests into 4 parallel shards
[#​10067](https://redirect.github.com/apache/arrow-rs/pull/10067)
([AdamGS](https://redirect.github.com/AdamGS))
- Add tests and fix corner cases for Parquet/GeoArrow extension type
conversion
[#​10065](https://redirect.github.com/apache/arrow-rs/pull/10065)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([paleolimbot](https://redirect.github.com/paleolimbot))
- Support writing REE arrays directly to Parquet
[#​10064](https://redirect.github.com/apache/arrow-rs/pull/10064)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- test(arrow-select): additional tests for inline-view filter fast path
(tests for
[#​9755](https://redirect.github.com/apache/arrow-rs/issues/9755))
[#​10054](https://redirect.github.com/apache/arrow-rs/pull/10054)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([alamb](https://redirect.github.com/alamb))
- test(arrow-select): add take\_bytes coverage for sliced values and
nullable offset overflow
[#​10053](https://redirect.github.com/apache/arrow-rs/pull/10053)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([alamb](https://redirect.github.com/alamb))
- Consolidate `filter_null_mask` into `FilterPredicate::filter_nulls`
[#​10049](https://redirect.github.com/apache/arrow-rs/pull/10049)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([alamb](https://redirect.github.com/alamb))
- \[Variant] Add `VariantBuilder` values check
[#​10016](https://redirect.github.com/apache/arrow-rs/pull/10016)
([sdf-jkl](https://redirect.github.com/sdf-jkl))
- \[Variant] Preserve `UUID` extension type metadata for Parquet writer
[#​10015](https://redirect.github.com/apache/arrow-rs/pull/10015)
([sdf-jkl](https://redirect.github.com/sdf-jkl))
- feat(parquet-variant): add Dictionary and REE variant\_to\_arrow
support
[#​10014](https://redirect.github.com/apache/arrow-rs/pull/10014)
([mneetika](https://redirect.github.com/mneetika))
- perf(arrow-ord): Avoid full index materialization for small-limit
lexsorts
[#​9991](https://redirect.github.com/apache/arrow-rs/pull/9991)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([pchintar](https://redirect.github.com/pchintar))
\* *This Changelog was automatically generated by
[github\_changelog\_generator](https://redirect.github.com/github-changelog-generator/github-changelog-generator)*
###
[`v59.0.0`](https://redirect.github.com/apache/arrow-rs/blob/HEAD/CHANGELOG.md#5910-2026-07-03)
[Compare
Source](https://redirect.github.com/apache/arrow-rs/compare/58.4.0...59.0.0)
[Full
Changelog](https://redirect.github.com/apache/arrow-rs/compare/59.0.0...59.1.0)
**Implemented enhancements:**
- Fast path for nested `DictionaryArray` casting
[#​10247](https://redirect.github.com/apache/arrow-rs/issues/10247)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- parquet/arrow: reading multiple nested columns fails with "Not all
children array length are the same!" when a list continues across
DataPageV2 page boundary
[#​10243](https://redirect.github.com/apache/arrow-rs/issues/10243)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
- Add product aggregate kernel to arrow-rs
[#​10150](https://redirect.github.com/apache/arrow-rs/issues/10150)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- Stricter `DataType` parsing
[#​10146](https://redirect.github.com/apache/arrow-rs/issues/10146)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- Support validating CSV headers against Schema
[#​10143](https://redirect.github.com/apache/arrow-rs/issues/10143)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- arrow-ipc: Supports compression level configuration for arrow-ipc
writer
[#​10132](https://redirect.github.com/apache/arrow-rs/issues/10132)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- \[Variant] `VariantArray` field API naming
[#​10093](https://redirect.github.com/apache/arrow-rs/issues/10093)
- Add `StructArray::field_` APIs symmetric to `StructArray::column_`
ones
[#​10092](https://redirect.github.com/apache/arrow-rs/issues/10092)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- arrow-buffer: implement Saturating, CheckedShl, Not num-traits for
i256
[#​10087](https://redirect.github.com/apache/arrow-rs/issues/10087)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- feat: native concat for `MapArray`
[#​10047](https://redirect.github.com/apache/arrow-rs/issues/10047)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- \[Variant] Add `variant_to_arrow` `Dictionary/REE` type support
[#​10013](https://redirect.github.com/apache/arrow-rs/issues/10013)
**Fixed bugs:**
- arrow-row on fixed size binary/list with size 0 and no nulls return
wrong length
[#​10270](https://redirect.github.com/apache/arrow-rs/issues/10270)
- casting list to 0-size fixedsizelist can cause incorrect output length
[#​10227](https://redirect.github.com/apache/arrow-rs/issues/10227)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- Buffer count mismatched with metadata when encoding records with
dictionary of dictionaries
[#​10213](https://redirect.github.com/apache/arrow-rs/issues/10213)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- `Buffer::into_mutable` is not consistent regarding sliced data and can
lead to panics
[#​10117](https://redirect.github.com/apache/arrow-rs/issues/10117)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- parquet\_derive: cannot read or write columns whose name is a Rust
keyword (raw identifiers like r#type become column "r#type")
[#​10112](https://redirect.github.com/apache/arrow-rs/issues/10112)
- parquet: fix OffsetBuffer panic on corrupt input
[#​10107](https://redirect.github.com/apache/arrow-rs/issues/10107)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
- Parquet geospatial conversion uses metadata key "algorithm" instead of
"edges" in geoarrow metadata
[#​9929](https://redirect.github.com/apache/arrow-rs/issues/9929)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
**Documentation updates:**
- doc: More comments to `concat_batches`
[#​10178](https://redirect.github.com/apache/arrow-rs/pull/10178)
([2010YOUY01](https://redirect.github.com/2010YOUY01))
- Minor: improve PageStore docs with a temp-file spilling example
[#​10074](https://redirect.github.com/apache/arrow-rs/pull/10074)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([alamb](https://redirect.github.com/alamb))
**Performance improvements:**
- perf: interleave\_list for List\<Primitive> could be optimized?
[#​10022](https://redirect.github.com/apache/arrow-rs/issues/10022)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- perf(arrow-ord): Avoid full index materialization for small-limit
lexsorts
[#​9990](https://redirect.github.com/apache/arrow-rs/issues/9990)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- Replace conversion of binary->string in arrow-row from arraydata to
direct construction
[#​10261](https://redirect.github.com/apache/arrow-rs/pull/10261)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- \[arrow-flight encode path]re-use flatbufferbuilder
[#​10220](https://redirect.github.com/apache/arrow-rs/pull/10220)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- \[10125] arrow-flight decode path optimizations (add `skip_validation`
to arrow-flight)
[#​10206](https://redirect.github.com/apache/arrow-rs/pull/10206)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- Improve performance of `concat_elements` ByteViewArray concatenation
[#​10161](https://redirect.github.com/apache/arrow-rs/pull/10161)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([pepijnve](https://redirect.github.com/pepijnve))
- \[arrow-flight] Optimize flight, remove some allocations, add
dictionary focused benchmarks
[#​10126](https://redirect.github.com/apache/arrow-rs/pull/10126)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- optimize(concat): concat map implementation
[#​10048](https://redirect.github.com/apache/arrow-rs/pull/10048)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([mapleFU](https://redirect.github.com/mapleFU))
- Reduce copies in Arrow IPC writer
[#​10044](https://redirect.github.com/apache/arrow-rs/pull/10044)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- perf(interleave): Optimize list interleave\_list when child is
primitive
[#​10025](https://redirect.github.com/apache/arrow-rs/pull/10025)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([mapleFU](https://redirect.github.com/mapleFU))
**Closed issues:**
- Soundness: Unsound alignment contract in public `FromBytes` trait and
`BitReader::get_batch`
[#​10164](https://redirect.github.com/apache/arrow-rs/issues/10164)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
- ParquetPushDecoder: expose the next row-group index that
try\_next\_reader will yield
[#​10148](https://redirect.github.com/apache/arrow-rs/issues/10148)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
- arrow-ipc: Extend writer benchmarks to include dictionaries
[#​10119](https://redirect.github.com/apache/arrow-rs/issues/10119)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
- bench(parquet): benchmark for nested list write
[#​10083](https://redirect.github.com/apache/arrow-rs/issues/10083)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
- Support i256 implement From\<i128>
[#​10080](https://redirect.github.com/apache/arrow-rs/issues/10080)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
**Merged pull requests:**
- fix(arrow-row): allow to convert non empty fixed size binary/list
array with size length 0 and no nulls
[#​10271](https://redirect.github.com/apache/arrow-rs/pull/10271)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([rluvaton](https://redirect.github.com/rluvaton))
- chore: Fix audit CI run by ignore quick-xml audit advisories
[#​10267](https://redirect.github.com/apache/arrow-rs/pull/10267)
([alamb](https://redirect.github.com/alamb))
- fix main: parquet test compilation failure
[#​10266](https://redirect.github.com/apache/arrow-rs/pull/10266)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- minor: drive-by refactors for dicts in substring & filter
[#​10264](https://redirect.github.com/apache/arrow-rs/pull/10264)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- Add validated row decode benchmark
[#​10259](https://redirect.github.com/apache/arrow-rs/pull/10259)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([alamb](https://redirect.github.com/alamb))
- arrow-cast: Add optimized path for unnesting a dict
[#​10248](https://redirect.github.com/apache/arrow-rs/pull/10248)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([brancz](https://redirect.github.com/brancz))
- feat: support uuid from fixed type of length 16
[#​10241](https://redirect.github.com/apache/arrow-rs/pull/10241)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([ariel-miculas](https://redirect.github.com/ariel-miculas))
- chore(deps): bump actions/cache from 6.0.0 to 6.1.0
[#​10240](https://redirect.github.com/apache/arrow-rs/pull/10240)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- fix: Rename parquet feature flag 'flate2-rust\_backened' to
'flate2-rust\_backend'
[#​10239](https://redirect.github.com/apache/arrow-rs/pull/10239)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([dannycjones](https://redirect.github.com/dannycjones))
- chore: Make clippy::question\_mark happy
[#​10231](https://redirect.github.com/apache/arrow-rs/pull/10231)
([Tpt](https://redirect.github.com/Tpt))
- fix(ipc): reject dictionary-encoded dictionary values
[#​10230](https://redirect.github.com/apache/arrow-rs/pull/10230)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([goutamadwant](https://redirect.github.com/goutamadwant))
- Replace `ArrayData` with direct `Array` construction in `arrow-row`
[#​10229](https://redirect.github.com/apache/arrow-rs/pull/10229)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- fix: casting list to fixedsizelist didn't respect input length
[#​10228](https://redirect.github.com/apache/arrow-rs/pull/10228)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- chore: Fix clippy::byte\_char\_slices (use byte strings instead of
explicit arrays)
[#​10225](https://redirect.github.com/apache/arrow-rs/pull/10225)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Tpt](https://redirect.github.com/Tpt))
- nit: arrow-pyarrow: Use string interning
[#​10224](https://redirect.github.com/apache/arrow-rs/pull/10224)
([Tpt](https://redirect.github.com/Tpt))
- Support concatenation of mixed FixedSizeBinary via
`concat_elements_dyn`
[#​10222](https://redirect.github.com/apache/arrow-rs/pull/10222)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([pepijnve](https://redirect.github.com/pepijnve))
- rename Compression struct
[#​10221](https://redirect.github.com/apache/arrow-rs/pull/10221)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- chore(deps): bump the all-other-cargo-deps group across 1 directory
with 16 updates
[#​10218](https://redirect.github.com/apache/arrow-rs/pull/10218)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0
[#​10210](https://redirect.github.com/apache/arrow-rs/pull/10210)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- \[10125] Introduce mult-batch decode benchmarks
[#​10207](https://redirect.github.com/apache/arrow-rs/pull/10207)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- chore(deps): bump actions/cache from 5.0.5 to 6.0.0
[#​10203](https://redirect.github.com/apache/arrow-rs/pull/10203)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- introduce decode benchmarks
[#​10202](https://redirect.github.com/apache/arrow-rs/pull/10202)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- Fix `merge_kernels` benchmark panic due to not wrapping with `Scalar`
[#​10199](https://redirect.github.com/apache/arrow-rs/pull/10199)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- Benchmarks and performance improvement for parquet boolean reader
[#​10196](https://redirect.github.com/apache/arrow-rs/pull/10196)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([jhorstmann](https://redirect.github.com/jhorstmann))
- add stale PR workflow
[#​10194](https://redirect.github.com/apache/arrow-rs/pull/10194)
([Jefffrey](https://redirect.github.com/Jefffrey))
- chore: group minor/patch dependabot updates
[#​10193](https://redirect.github.com/apache/arrow-rs/pull/10193)
([Jefffrey](https://redirect.github.com/Jefffrey))
- chore(deps): bump http from 1.4.0 to 1.4.2
[#​10191](https://redirect.github.com/apache/arrow-rs/pull/10191)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- chore(deps): bump syn from 2.0.117 to 2.0.118
[#​10190](https://redirect.github.com/apache/arrow-rs/pull/10190)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- chore(deps): bump chrono from 0.4.44 to 0.4.45
[#​10188](https://redirect.github.com/apache/arrow-rs/pull/10188)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- chore(deps): bump uuid from 1.23.1 to 1.23.3
[#​10186](https://redirect.github.com/apache/arrow-rs/pull/10186)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- chore: run `cargo update` to bump quinn
[#​10181](https://redirect.github.com/apache/arrow-rs/pull/10181)
([Jefffrey](https://redirect.github.com/Jefffrey))
- test: cover signed integers and bool in BitReader::get\_batch test
[#​10180](https://redirect.github.com/apache/arrow-rs/pull/10180)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([alamb](https://redirect.github.com/alamb))
- \[arrow-select] perf: Replace `ArrayData` with direct `Array`
construction in take kernels
[#​10176](https://redirect.github.com/apache/arrow-rs/pull/10176)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([liamzwbao](https://redirect.github.com/liamzwbao))
- Return PyValueError for nullable PyArrow struct imports
[#​10174](https://redirect.github.com/apache/arrow-rs/pull/10174)
([fallintoplace](https://redirect.github.com/fallintoplace))
- Fix Variant time microsecond JSON formatting
[#​10173](https://redirect.github.com/apache/arrow-rs/pull/10173)
([fallintoplace](https://redirect.github.com/fallintoplace))
- Split traits for plain and bitpacked decoding and fix soundness issue
in BitReader::get\_batch
[#​10172](https://redirect.github.com/apache/arrow-rs/pull/10172)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([jhorstmann](https://redirect.github.com/jhorstmann))
- fix: switch generic usages of `i128` to `IntervalMonthDayNano` for
MonthDayNano type
[#​10171](https://redirect.github.com/apache/arrow-rs/pull/10171)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- chore: specify `--locked` when cargo installing `cargo-audit`
[#​10170](https://redirect.github.com/apache/arrow-rs/pull/10170)
([Jefffrey](https://redirect.github.com/Jefffrey))
- chore: Fix clippy::useless\_borrows\_in\_formatting
[#​10163](https://redirect.github.com/apache/arrow-rs/pull/10163)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Tpt](https://redirect.github.com/Tpt))
- fix(arrow-cast): respect cast safety for overflowing temporal casts
[#​10162](https://redirect.github.com/apache/arrow-rs/pull/10162)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([SAY-5](https://redirect.github.com/SAY-5))
- chore(deps): bump actions/checkout from 6 to 7
[#​10159](https://redirect.github.com/apache/arrow-rs/pull/10159)
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- feat(parquet): add ParquetPushDecoder::peek\_next\_row\_group()
[#​10158](https://redirect.github.com/apache/arrow-rs/pull/10158)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([zhuqi-lucas](https://redirect.github.com/zhuqi-lucas))
- feat(pyarrow) `FromPyArrow` on `Vec<T>`: allow any iterable for input
[#​10155](https://redirect.github.com/apache/arrow-rs/pull/10155)
([Tpt](https://redirect.github.com/Tpt))
- nit: pyarrow: simplify class validation error creation
[#​10154](https://redirect.github.com/apache/arrow-rs/pull/10154)
([Tpt](https://redirect.github.com/Tpt))
- \[Variant] add doc reference to `VariantArrayBuilder`
[#​10152](https://redirect.github.com/apache/arrow-rs/pull/10152)
([sdf-jkl](https://redirect.github.com/sdf-jkl))
- feat: Adds product aggregate compute kernel
[#​10151](https://redirect.github.com/apache/arrow-rs/pull/10151)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([devanbenz](https://redirect.github.com/devanbenz))
- Stricter datatype parsing for decimals, fixedsizelists and time32/64
[#​10147](https://redirect.github.com/apache/arrow-rs/pull/10147)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- feat(arrow\_csv): add header validation option
[#​10144](https://redirect.github.com/apache/arrow-rs/pull/10144)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([XiNiHa](https://redirect.github.com/XiNiHa))
- \[Parquet] route dictionary page through the PageStore
[#​10142](https://redirect.github.com/apache/arrow-rs/pull/10142)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([liamzwbao](https://redirect.github.com/liamzwbao))
- chore: update pyo3 dependency to 0.29
[#​10134](https://redirect.github.com/apache/arrow-rs/pull/10134)
([timsaucer](https://redirect.github.com/timsaucer))
- feat(ipc): Supports compression level configuration
[#​10133](https://redirect.github.com/apache/arrow-rs/pull/10133)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([wForget](https://redirect.github.com/wForget))
- fix: write error for dbg output of out of range timestamps
[#​10130](https://redirect.github.com/apache/arrow-rs/pull/10130)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Jefffrey](https://redirect.github.com/Jefffrey))
- \[Variant] `VariantArray` field API naming
[#​10124](https://redirect.github.com/apache/arrow-rs/pull/10124)
([sdf-jkl](https://redirect.github.com/sdf-jkl))
- feat(arrow\_array): add helper function to create MapArray from
`Vec<Option<Vec<(Key, Option<Value>)>>>` for tests
[#​10123](https://redirect.github.com/apache/arrow-rs/pull/10123)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([rluvaton](https://redirect.github.com/rluvaton))
- perf(arrow-ipc): Add writer benchmarks for dictionaries
[#​10122](https://redirect.github.com/apache/arrow-rs/pull/10122)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([JakeDern](https://redirect.github.com/JakeDern))
- feat: support `MapArray` in lengths kernel
[#​10121](https://redirect.github.com/apache/arrow-rs/pull/10121)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([rluvaton](https://redirect.github.com/rluvaton))
- feat: add `OffsetBuffer::subtract` to allow to shift offsets by value
[#​10120](https://redirect.github.com/apache/arrow-rs/pull/10120)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([rluvaton](https://redirect.github.com/rluvaton))
- fix: `Buffer::into_mutable` return error instead of panic for
converting owned sliced when not start at 0 and fix returned Mutable
length
[#​10118](https://redirect.github.com/apache/arrow-rs/pull/10118)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([rluvaton](https://redirect.github.com/rluvaton))
- chore: update `Bytes` visibility to correctly reflect the actual
visibility
[#​10115](https://redirect.github.com/apache/arrow-rs/pull/10115)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([rluvaton](https://redirect.github.com/rluvaton))
- fix(parquet\_derive): support raw identifiers as column names
[#​10113](https://redirect.github.com/apache/arrow-rs/pull/10113)
([cbmixx](https://redirect.github.com/cbmixx))
- removed clippy ignore statment
[#​10111](https://redirect.github.com/apache/arrow-rs/pull/10111)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- Add `StructArray::field_` APIs symmetric to `StructArray::column_`
ones
[#​10110](https://redirect.github.com/apache/arrow-rs/pull/10110)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([sdf-jkl](https://redirect.github.com/sdf-jkl))
- fix(parquet): return error instead of panicking in pad\_nulls on
corrupt input
[#​10108](https://redirect.github.com/apache/arrow-rs/pull/10108)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([thepenguinco](https://redirect.github.com/thepenguinco))
- Minor: Add interleave tests for List\<Decimal128> and
List\<Timestamp(tz)>
[#​10099](https://redirect.github.com/apache/arrow-rs/pull/10099)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([alamb](https://redirect.github.com/alamb))
- Add arrow-flight test coverage for IPC compression
[#​10097](https://redirect.github.com/apache/arrow-rs/pull/10097)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
\[[arrow-flight](https://redirect.github.com/apache/arrow-rs/labels/arrow-flight)]
([alamb](https://redirect.github.com/alamb))
- chore(deps): bump pyspark from 3.3.2 to 3.4.4 in /parquet/pytest
[#​10091](https://redirect.github.com/apache/arrow-rs/pull/10091)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
- refactor(parquet): bundle array reader recursion args into
`ReaderArgs`
[#​10089](https://redirect.github.com/apache/arrow-rs/pull/10089)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([HippoBaro](https://redirect.github.com/HippoBaro))
- arrow-buffer: implement Saturating, Checked num-traits for i256
[#​10088](https://redirect.github.com/apache/arrow-rs/pull/10088)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([theirix](https://redirect.github.com/theirix))
- bench(parquet): add nested list writer benchmarks
[#​10084](https://redirect.github.com/apache/arrow-rs/pull/10084)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([mapleFU](https://redirect.github.com/mapleFU))
- Implement From\<i128> for i256
[#​10081](https://redirect.github.com/apache/arrow-rs/pull/10081)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([AdamGS](https://redirect.github.com/AdamGS))
- test(parquet): drop confusing `main` reference in page-roundtrip test
comment
[#​10072](https://redirect.github.com/apache/arrow-rs/pull/10072)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([adriangb](https://redirect.github.com/adriangb))
- ci: Split miri tests into 4 parallel shards
[#​10067](https://redirect.github.com/apache/arrow-rs/pull/10067)
([AdamGS](https://redirect.github.com/AdamGS))
- Add tests and fix corner cases for Parquet/GeoArrow extension type
conversion
[#​10065](https://redirect.github.com/apache/arrow-rs/pull/10065)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([paleolimbot](https://redirect.github.com/paleolimbot))
- Support writing REE arrays directly to Parquet
[#​10064](https://redirect.github.com/apache/arrow-rs/pull/10064)
\[[parquet](https://redirect.github.com/apache/arrow-rs/labels/parquet)]
([Rich-T-kid](https://redirect.github.com/Rich-T-kid))
- test(arrow-select): additional tests for inline-view filter fast path
(tests for
[#​9755](https://redirect.github.com/apache/arrow-rs/issues/9755))
[#​10054](https://redirect.github.com/apache/arrow-rs/pull/10054)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([alamb](https://redirect.github.com/alamb))
- test(arrow-select): add take\_bytes coverage for sliced values and
nullable offset overflow
[#​10053](https://redirect.github.com/apache/arrow-rs/pull/10053)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([alamb](https://redirect.github.com/alamb))
- Consolidate `filter_null_mask` into `FilterPredicate::filter_nulls`
[#​10049](https://redirect.github.com/apache/arrow-rs/pull/10049)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([alamb](https://redirect.github.com/alamb))
- \[Variant] Add `VariantBuilder` values check
[#​10016](https://redirect.github.com/apache/arrow-rs/pull/10016)
([sdf-jkl](https://redirect.github.com/sdf-jkl))
- \[Variant] Preserve `UUID` extension type metadata for Parquet writer
[#​10015](https://redirect.github.com/apache/arrow-rs/pull/10015)
([sdf-jkl](https://redirect.github.com/sdf-jkl))
- feat(parquet-variant): add Dictionary and REE variant\_to\_arrow
support
[#​10014](https://redirect.github.com/apache/arrow-rs/pull/10014)
([mneetika](https://redirect.github.com/mneetika))
- perf(arrow-ord): Avoid full index materialization for small-limit
lexsorts
[#​9991](https://redirect.github.com/apache/arrow-rs/pull/9991)
\[[arrow](https://redirect.github.com/apache/arrow-rs/labels/arrow)]
([pchintar](https://redirect.github.com/pchintar))
\* *This Changelog was automatically generated by
[github\_changelog\_generator](https://redirect.github.com/github-changelog-generator/github-changelog-generator)*
###
[`v58.4.0`](https://redirect.github.com/apache/arrow-rs/releases/tag/58.4.0):
arrow 58.4.0
[Compare
Source](https://redirect.github.com/apache/arrow-rs/compare/58.3.0...58.4.0)
<!---
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ow
> ā **Note**
>
> PR body was truncated to here.
</details>
---
### Configuration
š
**Schedule**: (UTC)
- Branch creation
- Between 12:00 AM and 03:59 AM, on the second Monday and fourth Monday
of the month (`* 0-3 * * 1#2,1#4`)
- Automerge
- At any time (no schedule defined)
š¦ **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
ā» **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
š» **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/vortex-data/vortex).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODAuMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4MC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6WyJjaGFuZ2Vsb2cvY2hvcmUiXX0=-->
---------
Signed-off-by: Robert Kruszewski <github@robertk.io>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Robert Kruszewski <github@robertk.io> Latest Branches
0%
claude/dict-varbin-append -21%
claude/varbin-builder-bulk-append 0%
XuQianJin-Stars:feature/opendal-cos Ā© 2026 CodSpeed Technology