Apache Arrow Go 18.7.0 Release


Published 21 Jul 2026
By The Apache Arrow PMC (pmc)

The Apache Arrow team is pleased to announce the v18.7.0 release of Apache Arrow Go. This minor release covers 101 commits from 23 distinct contributors.

Contributors

$ git shortlog -sn v18.6.0..v18.7.0
    52	Minh Vu
    21	Matt Topol
     3	Fredrik Fornwall
     3	Sai Asish Y
     2	Jared Yu (余启正)
     2	Neelesh Salian
     2	Ondřej Pavela
     2	abir
     1	Alex Dubov
     1	Bryce Mecum
     1	David Li
     1	David Zhao
     1	Dima Kuznetsov
     1	Lucas Valente
     1	Mahdi Dibaiee
     1	Matan Rosenberg
     1	Patzifist
     1	Ruihao Chen
     1	Samuel Arnold
     1	Tobias Pütz
     1	Truffle
     1	Varun Venkatesh
     1	daniel-adam-tfs

Highlights

Arrow

Features

  • Support casts between binary/utf8 and binary_view/utf8_view #802
  • Added a Resize method to RecordBuilder #805
  • Support dictionary arrays for Filter and Take #716
  • Add an UnshredVariant method for collapsing a shredded variant array #859
  • Add implementation of TimestampWithOffset canonical extension type #558

Bug Fixes

  • Made C Data interface stream memory release deterministic #793
  • Preserve large integer precision in JSON decoding #816

Parquet

Features

  • Support writing LARGE_LIST arrays #838
  • Opt-in streaming reads for large data pages #880

Bug Fixes

  • Corrected a couple variant bugs #841, #840, #939
  • Properly align DataPageV2 pages to row boundaries in spaced writes #883

Performance Improvements

  • Added SIMD-accelerated byte-stream-split decoding #654
  • Avoid constructing ColunChunkMetaData in page index range determination #831
  • Improve BloomFilter memory recycling and pooling #864

Changelog

What's Changed

  • fix(release): keys download by @zeroshade in #781
  • parquet/compress: enable WithAllLitEntropyCompression(true) for zstd by @varun0630 in #779
  • release: fix syntax error in verify_rc.sh by @amoeba in #782
  • fix(parquet): align dictionary fallback with parquet-mr by @twuebi in #786
  • fix(arrow/cdata): make nativeCRecordBatchReader deterministic by @zeroshade in #793
  • fix(compute/kernels): map FSB byte-width to numeric memo type for is_in by @SAY-5 in #797
  • fix(arrow/flight): deliver response headers eagerly in streaming client middleware by @zeroshade in #801
  • fix(ipc): preserve map child field metadata by @dimakuz in #809
  • fix(avro): error on complex (non-nullable) unions instead of silently dropping (#777) by @SAY-5 in #808
  • fix(parquet/metadata): do not pre-set hasDistinctCount in stat factories by @SAY-5 in #807
  • feat(compute): support casts between binary/string and binary_view/string_view by @zeroshade in #802
  • fix(arrow/array): preserve large integer precision in JSON decoding by @zeroshade in #816
  • feat(arrow/array): add Resize method to RecordBuilder by @oakad in #805
  • perf(parquet/pqarrow): cap RecordReader batch size to actual row count by @paveon in #817
  • docs(parquet): correct DefaultDataPageSize comment from 1K to 1M by @zeroshade in #822
  • fix(arrow/array): silence copylocks warning in numeric_generic.go by @zeroshade in #823
  • feat(arrow/compute/exprs): support expr.IntervalYearToMonthLiteral in literalToDatum by @zeroshade in #825
  • fix(parquet): return error instead of panicking on first-write failure by @zeroshade in #824
  • [Parquet] Add SIMD-accelerated byte-stream-split decoding by @daniel-adam-tfs in #654
  • perf(parquet/metadata): avoid constructing ColumnChunkMetaData in page index range determination by @paveon in #831
  • feat: filter and take for dictionary arrays by @lesam in #716
  • fix(arrow/array): adding string boundary checking for (*String).Value by @happydave1 in #844
  • fix(parquet/variant): correct binary search bounds in ObjectValue.ValueByKey by @qzyu999 in #841
  • fix(parquet/variant): correct is_large bit position in valueSize for arrays by @qzyu999 in #840
  • feat(avro): support local-timestamp logical types by @abir-eon in #832
  • fix(avro): append raw bytes by @matan129 in #850
  • fix(arrow/array): use scale-aware ValueStr in decimal array String() by @zeroshade in #849
  • feat(parquet/pqarrow): support writing LARGE_LIST types by @lidavidm in #838
  • fix(arrow/scalar): implement Release()/Retain() on *scalar.Extension by @zeroshade in #851
  • docs(arrow/ipc): document that Writer and FileWriter are not concurrency safe by @zeroshade in #856
  • fix(parquet): add WriteBatchSpacedWithError to surface spaced-write failures by @zeroshade in #852
  • ci: pin Go to go.mod in RC verify so the matching toolchain is used by @zeroshade in #857
  • feat(arrow/extensions): add UnshredVariant to collapse a shredded variant array by @nssalian in #859
  • fix(arrow/compute): accept type max value in safe decimal-to-int cast by @zeroshade in #862
  • fix(array): validate negative bounds in NewSliceData by @fallintoplace in #870
  • fix(array): dictionary null index zeroing by @fallintoplace in #871
  • fix(array): struct stringer required child mask by @fallintoplace in #873
  • fix(array): empty chunked approximate equality by @fallintoplace in #874
  • fix(array): validate dense union offset lengths by @fallintoplace in #875
  • Use semantic type equality in AddColumn by @fallintoplace in #878
  • fix(array): clear dictionary data on reset by @fallintoplace in #876
  • Reject negative chunked slice bounds by @fallintoplace in #879
  • fix(array): array data hashing coverage by @fallintoplace in #872
  • Support dense union slice offsets by @fallintoplace in #877
  • Support sparse union sliced type ids by @fallintoplace in #881
  • fix(build): correct phony target declaration by @fallintoplace in #890
  • fix(parquet/compress): Gzip CompressBound by @fallintoplace in #886
  • fix(parquet): free excluded stats bytes in ApplyStatSizeLimits by @mdibaiee in #885
  • fix(tmpl): preserve escaped JSON string bytes by @fallintoplace in #889
  • fix(parquet/compress): Brotli CompressBound by @fallintoplace in #884
  • fix(parquet): align DataPageV2 pages to row boundaries in spaced writes by @truffle-dev in #883
  • fix(array): guard BinaryViewBuilder size checks by @fallintoplace in #888
  • fix: clarify StringViewBuilder UnmarshalJSON error message by @fallintoplace in #894
  • fix: clarify StringViewBuilder.UnmarshalOne expected type by @fallintoplace in #897
  • fix: guard multiBufferBuilder UnsafeAppend against short copy by @fallintoplace in #896
  • fix(array): make SetNull idempotent and track null count by @fallintoplace in #905
  • fix(ci): accept --json and pin gobenchdata by @fallintoplace in #906
  • build: verify Apache RAT jar checksum before execution by @fallintoplace in #908
  • fix(parquet): read full bloom filter buffers by @fallintoplace in #892
  • fix(docs): fix CPU markdown link in README by @fallintoplace in #907
  • fix(parquet): validate DataPageV2 decoded length by @fallintoplace in #911
  • fix(arreflect): validate primitive conversion assignment overflow checks by @fallintoplace in #903
  • fix(parquet): clamp repLevels in byte-array DataPageV2 row-boundary alignment by @zeroshade in #919
  • fix(parquet/metadata): fix BloomFilter memory recycling, doc contract, and benchmark by @Patzifist in #864
  • fix(flight/flightsql): recover real error when prepared DoPut stream closes early by @fornwall in #920
  • fix: guard protobuf oneof/union reflection on nil oneof values by @fallintoplace in #910
  • fix(parquet): copy ByteArray statistics min/max to prevent use-after-free by @zeroshade in #917
  • fix(array): bounds check FixedSizeBinary.Value by @fallintoplace in #923
  • fix(array): reject unsupported type IDs by @fallintoplace in #925
  • fix(array): validate JSON start offsets by @fallintoplace in #929
  • fix(scalar): validate dictionary indices before conversion by @fallintoplace in #927
  • fix(array): retain dictionary before replacement by @fallintoplace in #926
  • feat(parquet): opt-in streaming reads for large data pages by @joechenrh in #880
  • fix(parquet): propagate row-group and page-index write errors by @fallintoplace in #921
  • fix(array): honor struct offsets in constructors and validity masks by @fallintoplace in #922
  • fix(parquet): make column reader cleanup idempotent by @fallintoplace in #924
  • fix(scalar): hash list values logically by @fallintoplace in #928
  • fix(array): recursively validate nested arrays by @fallintoplace in #930
  • feat(parquet/variant): add Metadata.SizeBytes to split a concatenated variant by @nssalian in #939
  • fix(cdata): validate imported array sizes by @fallintoplace in #931
  • fix(avro): decode nullable logical timestamps by @abir-eon in #935
  • fix(flight/flightsql/example): support dictionary-encoded parameter columns by @fornwall in #936
  • fix(arrow/scalar): reject negative indices in GetScalar by @fornwall in #940
  • fix(flight): reject malformed unary bearer headers by @fallintoplace in #941
  • fix(flight): reject Basic credentials without a separator by @fallintoplace in #942
  • fix(memory): keep allocator ownership across Buffer.Reset by @fallintoplace in #947
  • fix(parquet): limit page allocations by @fallintoplace in #953
  • fix(parquet): return decompression errors by @fallintoplace in #954
  • fix(parquet): return errors for malformed encrypted payloads by @fallintoplace in #945
  • fix: repair failing benchmarks and stop bench.sh masking failures by @zeroshade in #938
  • fix(parquet): handle short input in GetBatchBools by @fallintoplace in #946
  • fix(arrow): validate timestamp timezones by @fallintoplace in #952
  • fix(ipc): validate message framing bounds by @fallintoplace in #955
  • fix(parquet): reject truncated bit-packed batches by @fallintoplace in #943
  • fix(compute): handle comparison output offsets by @fallintoplace in #956
  • fix(arrow/array): avoid allocating for ReserveData(0) by @fallintoplace in #895
  • fix(compute): release temporary arrays in binary view casts by @fallintoplace in #898
  • fix(arrow/array): validate map builder entry lengths by @fallintoplace in #957
  • Add TimestampWithOffset canonical extension type by @serramatutu in #558
  • chore: bump version number by @zeroshade in #959

New Contributors

  • @varun0630 made their first contribution in #779
  • @twuebi made their first contribution in #786
  • @SAY-5 made their first contribution in #797
  • @oakad made their first contribution in #805
  • @paveon made their first contribution in #817
  • @lesam made their first contribution in #716
  • @happydave1 made their first contribution in #844
  • @qzyu999 made their first contribution in #841
  • @abir-eon made their first contribution in #832
  • @matan129 made their first contribution in #850
  • @nssalian made their first contribution in #859
  • @fallintoplace made their first contribution in #870
  • @mdibaiee made their first contribution in #885
  • @truffle-dev made their first contribution in #883
  • @Patzifist made their first contribution in #864
  • @fornwall made their first contribution in #920

Full Changelog: https://github.com/apache/arrow-go/compare/v18.6.0...v18.7.0