This is an automated email from the ASF dual-hosted git repository.
kevinjqliu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/main by this push:
new 8102f4cb60 Site: Add Iceberg-Go 0.7.0 release blog post (#18341)
8102f4cb60 is described below
commit 8102f4cb60e23d53efaa5a15c87756dbadb06602
Author: Matt Topol <[email protected]>
AuthorDate: Thu Oct 1 21:37:28 2026 -0400
Site: Add Iceberg-Go 0.7.0 release blog post (#18341)
---
.../posts/2026-10-01-iceberg-go-0.7.0-release.md | 176 +++++++++++++++++++++
1 file changed, 176 insertions(+)
diff --git a/site/docs/blog/posts/2026-10-01-iceberg-go-0.7.0-release.md
b/site/docs/blog/posts/2026-10-01-iceberg-go-0.7.0-release.md
new file mode 100644
index 0000000000..58e7cb5bbd
--- /dev/null
+++ b/site/docs/blog/posts/2026-10-01-iceberg-go-0.7.0-release.md
@@ -0,0 +1,176 @@
+---
+date: 2026-10-01
+title: Apache Iceberg Go 0.7.0 Release
+slug: apache-iceberg-go-0.7.0-release
+authors:
+ - iceberg-pmc
+categories:
+ - release
+---
+
+<!--
+ - 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 ownership.
+ - The ASF licenses this file to You under the Apache License, Version 2.0
+ - (the "License"); you may not use this file except in compliance with
+ - the License. You may obtain a copy of the License at
+ -
+ - http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing, software
+ - distributed under the License is distributed on an "AS IS" BASIS,
+ - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ - See the License for the specific language governing permissions and
+ - limitations under the License.
+ -->
+
+The Apache Iceberg community is pleased to announce version 0.7.0 of
[iceberg-go](https://github.com/apache/iceberg-go).
+
+This release covers approximately four months of development since the 0.6.0
release in May 2026 and is the result of merging nearly **750 PRs** from **53
contributors**, including **33 first-time contributors**. See the [full
changelog](https://github.com/apache/iceberg-go/compare/v0.6.0...v0.7.0) for
the complete list of changes.
+
+`iceberg-go` is a native Go implementation of the Apache Iceberg table format,
providing libraries for reading, writing, and managing Iceberg tables in Go
applications.
+
+<!-- more -->
+
+## Release Highlights
+
+### Iceberg V3 Table Spec Support
+
+This release continues to close the gap with the Iceberg V3 table
specification:
+
+- **Geometry and geography types**: [`geometry` and `geography` types with
schema plumbing](https://github.com/apache/iceberg-go/pull/984), [WKB encoding
and GeoArrow conversion](https://github.com/apache/iceberg-go/pull/1138),
[PROJJSON CRS read/write
support](https://github.com/apache/iceberg-go/pull/1426), [geo bounds emitted
in manifest data files](https://github.com/apache/iceberg-go/pull/1371) and
[aggregated at the manifest
level](https://github.com/apache/iceberg-go/pull/1511), a [...]
+- **Variant shredding**: A [shredded variant
reader](https://github.com/apache/iceberg-go/pull/1238) and an opt-in [shredded
variant writer](https://github.com/apache/iceberg-go/pull/1351) with
[type-uniformity inference](https://github.com/apache/iceberg-go/pull/1846),
[bounds for shredded fields](https://github.com/apache/iceberg-go/pull/1478),
and [predicate pushdown over shredded
fields](https://github.com/apache/iceberg-go/pull/1607) using a new `extract`
expression
+- **Deletion vectors**: The [scanner deletion-vector read
path](https://github.com/apache/iceberg-go/pull/1053), [DV writes wired into
the position-delete producer](https://github.com/apache/iceberg-go/pull/1113),
[DVs for partitioned V3
tables](https://github.com/apache/iceberg-go/pull/1151), [merging DVs on
repeated merge-on-read
deletes](https://github.com/apache/iceberg-go/pull/1419), [DV planning
validations matching Java's
`DeleteFileIndex`](https://github.com/apache/iceberg-go/pul [...]
+- **Row lineage**: [Row lineage preserved through copy-on-write
rewrites](https://github.com/apache/iceberg-go/pull/1099), [`first_row_id`
inherited for V1/V2-era manifests in V3
tables](https://github.com/apache/iceberg-go/pull/1295), and [row-group pruning
re-enabled with correct lineage
tracking](https://github.com/apache/iceberg-go/pull/1250)
+- **Unknown transforms**: [Unknown partition and sort transforms can now be
read](https://github.com/apache/iceberg-go/pull/1463) for forward compatibility
+- **Nanosecond timestamps**: Nanosecond support across
[predicates](https://github.com/apache/iceberg-go/pull/1195),
[year/month](https://github.com/apache/iceberg-go/pull/1196) and
[bucket](https://github.com/apache/iceberg-go/pull/1197) transforms, [Substrait
literals](https://github.com/apache/iceberg-go/pull/1590), and [partition
values](https://github.com/apache/iceberg-go/pull/2034)
+
+### Metadata Tables and Incremental Scans
+
+`Table.Inspect` gained a full set of metadata tables, and two new incremental
scan types were added:
+
+- **Metadata tables**:
[`history`](https://github.com/apache/iceberg-go/pull/1465),
[`snapshots`](https://github.com/apache/iceberg-go/pull/1476),
[`metadata_log_entries`](https://github.com/apache/iceberg-go/pull/1696),
[`refs`](https://github.com/apache/iceberg-go/pull/1695),
[`manifests`](https://github.com/apache/iceberg-go/pull/1697),
[`data_files`](https://github.com/apache/iceberg-go/pull/1698),
[`delete_files`](https://github.com/apache/iceberg-go/pull/1699),
[`entries`](https:// [...]
+- **Incremental append scan**:
[`Table.NewIncrementalAppendScan`](https://github.com/apache/iceberg-go/pull/1702)
plans data files added between two snapshots
+- **Incremental changelog scan**:
[`Table.NewIncrementalChangelogScan`](https://github.com/apache/iceberg-go/pull/1883)
produces file-level insert and delete tasks, along with [delete-file-backed
changelog task types](https://github.com/apache/iceberg-go/pull/1897) as
groundwork for row-level changelogs
+
+### REST Server-Side Scan Planning
+
+`iceberg-go` can now delegate scan planning to a REST catalog that supports
the scan-planning endpoints. Local planning remains the default; remote
planning is opt-in:
+
+- **Foundations**: [Iceberg expression JSON
parsing](https://github.com/apache/iceberg-go/pull/1212) and the [public
scan-planning API surface](https://github.com/apache/iceberg-go/pull/1213)
+- **Client**: [Scan-planning client
methods](https://github.com/apache/iceberg-go/pull/1324), a [`WaitForPlan`
poller](https://github.com/apache/iceberg-go/pull/1469), and [decoding of REST
scan tasks into `FileScanTask`s](https://github.com/apache/iceberg-go/pull/1492)
+- **Delegation**: [Complete server-side scan
delegation](https://github.com/apache/iceberg-go/pull/1857), [concurrent
fetching of remote plan tasks](https://github.com/apache/iceberg-go/pull/1959),
and [retries, telemetry, and
documentation](https://github.com/apache/iceberg-go/pull/2020)
+- **Correctness**: A [Java scan-planning integration
suite](https://github.com/apache/iceberg-go/pull/1505) and [verification that
REST planning produces tasks equivalent to local
planning](https://github.com/apache/iceberg-go/pull/2019)
+
+### Metrics Reporting
+
+A new `metrics` package adds opt-in reporting for scans and commits:
+
+- **Reporter framework**: A [`Reporter` contract with built-in
reporters](https://github.com/apache/iceberg-go/pull/1343), [report and wire
types](https://github.com/apache/iceberg-go/pull/1421), and [reporter selection
through catalog, table, and
scan](https://github.com/apache/iceberg-go/pull/1430)
+- **Instrumentation**: [`ScanReport` emitted from scan
planning](https://github.com/apache/iceberg-go/pull/1501) and [`CommitReport`
emitted from commits](https://github.com/apache/iceberg-go/pull/1596), with
[environment context in commit
reports](https://github.com/apache/iceberg-go/pull/1680)
+- **Reporters**: A [REST metrics
reporter](https://github.com/apache/iceberg-go/pull/1655) and an [OpenTelemetry
reporter](https://github.com/apache/iceberg-go/pull/1767), documented in a
[metrics reporting guide](https://github.com/apache/iceberg-go/pull/1862)
+
+### Row-Level Operations and Maintenance
+
+- **Merge-on-read writes**: A [`PositionDeltaWriter` for insert/reinsert
splits](https://github.com/apache/iceberg-go/pull/1120),
[`RowDelta.RemoveDeletes` for deletion-vector
supersession](https://github.com/apache/iceberg-go/pull/1785), and a
[`CommitEqualityDeletes` convenience
API](https://github.com/apache/iceberg-go/pull/1835)
+- **Dynamic overwrite**: A [partition-match predicate for dynamic
overwrite](https://github.com/apache/iceberg-go/pull/1217)
+- **Compaction**: [Partial rewrites committed per
group](https://github.com/apache/iceberg-go/pull/1682), [compaction forced on
file-scoped delete dead space](https://github.com/apache/iceberg-go/pull/1296),
[`CollectDeadPositionDeletes` for leader-side
expunge](https://github.com/apache/iceberg-go/pull/1434), [`RewriteFiles` able
to add delete files](https://github.com/apache/iceberg-go/pull/1677), and
[tunables bounding compaction pipeline
memory](https://github.com/apache/iceberg-go/p [...]
+- **Rewrite manifests**: A [`RewriteManifests` maintenance task and CLI
command](https://github.com/apache/iceberg-go/pull/1283) with [opt-in
clustering](https://github.com/apache/iceberg-go/pull/1940)
+- **Sort order on write**: [The table's default sort order is now enforced on
write](https://github.com/apache/iceberg-go/pull/1157)
+
+### Transactions and Schema Evolution
+
+- **Union schema evolution**: [Evolve a schema to the union of the current and
an incoming schema by name](https://github.com/apache/iceberg-go/pull/1359),
matching Java's `unionByNameWith`
+- **New transaction APIs**:
[`Transaction.RemoveProperties`](https://github.com/apache/iceberg-go/pull/1751),
[`Transaction.ReplaceSortOrder`](https://github.com/apache/iceberg-go/pull/1833),
[`Transaction.AssertRefSnapshotID`](https://github.com/apache/iceberg-go/pull/1786),
and an [explicit default spec/sort-order commit fence via
`Transaction.AssertDefaultShape`](https://github.com/apache/iceberg-go/pull/1891)
+- **Partition specs**: [Added data files can target any registered partition
spec](https://github.com/apache/iceberg-go/pull/1818)
+- **Branch-aware writes**: [Write planning resolves snapshots from the target
branch head](https://github.com/apache/iceberg-go/pull/1839),
[`RollbackToSnapshot` is scoped to the transaction's target
branch](https://github.com/apache/iceberg-go/pull/1828), and [multi-table
commits are fenced with the target branch
requirement](https://github.com/apache/iceberg-go/pull/1858)
+- **Atomicity**: [Transaction apply is now
atomic](https://github.com/apache/iceberg-go/pull/1416) and [transactions are
only marked committed after a successful
commit](https://github.com/apache/iceberg-go/pull/1603)
+
+### Catalog Improvements
+
+- **REST endpoint negotiation**: [The REST client honors the endpoints
advertised by `/v1/config`](https://github.com/apache/iceberg-go/pull/1174)
+- **REST features**: [Rename
view](https://github.com/apache/iceberg-go/pull/1461), [custom namespace
separators](https://github.com/apache/iceberg-go/pull/1253),
[`snapshot-loading-mode` support in
`loadTable`](https://github.com/apache/iceberg-go/pull/1749), [catalog labels
on the load table/view read
path](https://github.com/apache/iceberg-go/pull/2013), and [`oauth2-server-uri`
for the OAuth token endpoint](https://github.com/apache/iceberg-go/pull/1369)
+- **SQL UDFs**: A [SQL UDF metadata model
package](https://github.com/apache/iceberg-go/pull/1418) and [read support
through the REST catalog](https://github.com/apache/iceberg-go/pull/1432)
+- **Purge table**: A [`PurgeTable` optional
interface](https://github.com/apache/iceberg-go/pull/1104) for physically
deleting table files
+- **Hadoop catalog**: [Moved onto the generic IO
interface](https://github.com/apache/iceberg-go/pull/1158) with [support for
blob filesystems](https://github.com/apache/iceberg-go/pull/1350) and [opt-in
arbitrary schemes](https://github.com/apache/iceberg-go/pull/1268)
+- **Hive catalog**: [Table drops and renames are
locked](https://github.com/apache/iceberg-go/pull/1442), [HMS table metadata is
synchronized on commit](https://github.com/apache/iceberg-go/pull/1486), and
[lock retry behavior aligned with
Java](https://github.com/apache/iceberg-go/pull/1763)
+- **Conformance tests**: A [shared catalog conformance test
suite](https://github.com/apache/iceberg-go/pull/1694) now runs against every
catalog implementation
+
+### Encryption Foundations
+
+Groundwork for Iceberg table encryption was added:
+
+- **Interfaces**: [`EncryptionManager` and `KeyManagementClient` interfaces
with an in-memory KMS](https://github.com/apache/iceberg-go/pull/1447)
+- **KMS registry**: A [KMS catalog-property
registry](https://github.com/apache/iceberg-go/pull/1493) selected through
`encryption.kms-type` / `encryption.kms-impl`
+
+### IO Improvements
+
+- **Per-cloud packages**: [`io/gocloud` was split into per-cloud backend
packages](https://github.com/apache/iceberg-go/pull/1961) so applications only
link the cloud SDKs they use
+- **Azure**: [`ManagedIdentityCredential`
support](https://github.com/apache/iceberg-go/pull/1062)
+- **S3**: [Connect timeout
property](https://github.com/apache/iceberg-go/pull/1141), [compatibility with
GCS HMAC endpoints](https://github.com/apache/iceberg-go/pull/1423), and
[explicit `s3.*` credentials overriding the context AWS
config](https://github.com/apache/iceberg-go/pull/1506)
+- **GCS**: [The GCS client authenticates with supplied
credentials](https://github.com/apache/iceberg-go/pull/1503)
+- **Glue**: [`aws-profile` support for the Glue catalog in the CLI
config](https://github.com/apache/iceberg-go/pull/1320)
+
+### Performance
+
+More than 120 performance PRs landed in this release, touching nearly every
part of the read, write, and planning paths. Some of the highlights:
+
+- **Parallel reads**: [Large Parquet files are split into scan tasks by
row-group byte range](https://github.com/apache/iceberg-go/pull/1939),
controlled by `read.split.target-size`
+- **Scan planning**: [Snapshot manifests cached across
scans](https://github.com/apache/iceberg-go/pull/1970), [compiled filter and
pruning plans cached](https://github.com/apache/iceberg-go/pull/1936), [scan
columns projected during manifest
reads](https://github.com/apache/iceberg-go/pull/1972), and [row limits honored
during local planning](https://github.com/apache/iceberg-go/pull/1935)
+- **Delete handling**: [Equality deletes indexed by partition and
sequence](https://github.com/apache/iceberg-go/pull/1752), [positional deletes
indexed by path and partition](https://github.com/apache/iceberg-go/pull/1753),
[equality and position deletes loaded lazily per scan
task](https://github.com/apache/iceberg-go/pull/1963), and [equality deletes
pruned by data-file metrics](https://github.com/apache/iceberg-go/pull/1960)
+- **Row-group pruning**: [Parquet row groups pruned by
dictionary](https://github.com/apache/iceberg-go/pull/2006)
+- **Maintenance**: [Shared manifest reads deduplicated during snapshot
expiration](https://github.com/apache/iceberg-go/pull/1118) and [orphan
cleanup](https://github.com/apache/iceberg-go/pull/1133)
+- **Writes**: [Parquet dictionary encoding enabled by
default](https://github.com/apache/iceberg-go/pull/931), matching Java Iceberg
+
+### Arrow Go v18.8
+
+`iceberg-go` now depends on [Apache Arrow
Go](https://github.com/apache/arrow-go) v18.8.0, up from v18.6.0 in 0.6.0
([#1504](https://github.com/apache/iceberg-go/pull/1504),
[#2002](https://github.com/apache/iceberg-go/pull/2002)), so applications
importing both modules will resolve `arrow-go` to at least v18.8.0. The new
`compute.VariantGet` kernel backs variant `extract`, with a zero-copy fast path
for fields shredded to the queried type. Variant columns are now written with
the canoni [...]
+
+### Bug Fixes
+
+Nearly 400 bug fixes landed in this release, many of them hardening
validation, JSON decoding, and defensive copying across the public API. Notable
fixes include:
+
+- [Fix deletion vectors orphaned by data-file
rewrites](https://github.com/apache/iceberg-go/pull/1221)
+- [Fix OCC rewrite
resurrection](https://github.com/apache/iceberg-go/pull/1427)
+- [Fix `_row_id` renumbering when rows are dropped in a
scan](https://github.com/apache/iceberg-go/pull/1237)
+- [Keep generated position deletes correct under row-group
pruning](https://github.com/apache/iceberg-go/pull/1246)
+- [Apply positional deletes with batch-local `Take`
indices](https://github.com/apache/iceberg-go/pull/1183)
+- [Fix manifest pruning when partition source columns are
dropped](https://github.com/apache/iceberg-go/pull/1191)
+- [Fix incorrect pruning for `NOT STARTS WITH` over truncated string
partitions](https://github.com/apache/iceberg-go/pull/1193)
+- [Truncate strings by Unicode code points instead of UTF-8
bytes](https://github.com/apache/iceberg-go/pull/1223)
+- [Retain ref head snapshots in expire
snapshots](https://github.com/apache/iceberg-go/pull/1842)
+- [Respect `gc.enabled` during snapshot
expiration](https://github.com/apache/iceberg-go/pull/1737)
+- [Detect concurrently-removed data files in row-level
deletes](https://github.com/apache/iceberg-go/pull/1298)
+- [Fix handling of partition specs with nested
fields](https://github.com/apache/iceberg-go/pull/2015)
+- [Encode day-transform partition fields with the Avro date logical
type](https://github.com/apache/iceberg-go/pull/915)
+- [Fix a big-endian alignment
crash](https://github.com/apache/iceberg-go/pull/1194)
+- [Fix js/wasm builds by dropping `pterm` from the library
path](https://github.com/apache/iceberg-go/pull/2061)
+
+### Breaking Changes
+
+Some of these changes are breaking changes that need to be called out:
+
+- **Scan concurrency option**
([#1462](https://github.com/apache/iceberg-go/pull/1462)): the misspelled
`WitMaxConcurrency` scan option was renamed to `WithScanMaxConcurrency`.
+- **Transform interface**
([#1252](https://github.com/apache/iceberg-go/pull/1252)): `Transform` gained a
type-aware `ToHumanStrType` method, which external `Transform` implementations
must add. `ToHumanStr(any)` is deprecated.
+- **Hadoop catalog IO interfaces**
([#1185](https://github.com/apache/iceberg-go/pull/1185)): the `MkdirIO` and
`ReadDirIO` interfaces were removed in favor of `MkdirAll` and `WalkDir`.
+- **Hadoop catalog cloud schemes**
([#1961](https://github.com/apache/iceberg-go/pull/1961)): `catalog/hadoop` no
longer registers cloud schemes as a side effect. Users on cloud storage must
blank-import the matching `io` backend package. The existing `io/gocloud`
symbols remain available as deprecated aliases.
+- **Orphan cleanup**
([#1286](https://github.com/apache/iceberg-go/pull/1286)): orphan file cleanup
now requires the table's `FileIO` to implement `ListableIO`.
+- **Parquet dictionary encoding**
([#931](https://github.com/apache/iceberg-go/pull/931)): data files are now
written with dictionary encoding enabled by default.
+
+## New Contributors
+
+Welcome to all 33 first-time contributors:
+@mithilgirish, @paveon, @sungwy, @Revanth14, @rraulinio, @artbcf, @gerinsp,
@jeremybarner, @strophy, @neu-hsc, @ebyhr, @abnobdoss, @AhmedDlshad007,
@nanookclaw, @prafulla-kiran, @rasta-rocket, @the-onewho-knocks,
@iremcaginyurtturk, @hankivstmb, @jx2lee, @1991santhu, @mattfaltyn, @dgvj-work,
@dimakuz, @ryanworl, @technicolorbeat, @codeAnqiang-ma, @deepak-2605,
@smaheshwar-pltr, @ajiteshsingh, @sgg, @KranzL, @shoemoney
+
+## Getting Involved
+
+The `iceberg-go` project welcomes contributions. We use GitHub
[issues](https://github.com/apache/iceberg-go/issues) for tracking work and the
[Apache Iceberg Community Slack](https://iceberg.apache.org/community/#slack)
for discussions.
+
+The easiest way to get started is to:
+
+1. Try `iceberg-go` with your workloads and report any issues you encounter
+2. Review the [contributor
guide](https://github.com/apache/iceberg-go/blob/main/CONTRIBUTING.md)
+3. Look for [good first
issues](https://github.com/apache/iceberg-go/contribute)
+
+For more information, visit the [iceberg-go
repository](https://github.com/apache/iceberg-go).