ebyhr commented on code in PR #15679: URL: https://github.com/apache/iceberg/pull/15679#discussion_r2963871149
########## site/docs/blog/posts/2026-03-05-iceberg-go-0.5.0-release.md: ########## @@ -0,0 +1,143 @@ +--- +date: 2026-03-05 +title: Apache Iceberg Go 0.5.0 Release +slug: apache-iceberg-go-0.5.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.5.0 of [iceberg-go](https://github.com/apache/iceberg-go). + +This release covers approximately five months of development since the 0.4.0 release in October 2025 and is the result of merging over **110 PRs** from **31 contributors**, including **18 first-time contributors**. See the [full changelog](https://github.com/apache/iceberg-go/compare/v0.4.0...v0.5.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 significantly advances `iceberg-go`'s implementation of the Iceberg V3 table specification: + +- **Table Metadata V3**: [Full V3 metadata format support](https://github.com/apache/iceberg-go/pull/585) is now implemented +- **Unknown Type**: [Support for the `Unknown` type](https://github.com/apache/iceberg-go/pull/605) introduced in the V3 spec +- **TimestampNano and TimestampNanoTz**: [New timestamp nanosecond types](https://github.com/apache/iceberg-go/pull/594) required by V3 are now supported +- **Row Lineage Tracking**: [Row lineage metadata](https://github.com/apache/iceberg-go/pull/659) is now tracked and the [snapshot producer wires V3 row-lineage state](https://github.com/apache/iceberg-go/pull/728) correctly, with a fix for [first-row-id assignment in V3 manifest lists](https://github.com/apache/iceberg-go/pull/741) +- **Source IDs**: [Support for `source-ids` metadata](https://github.com/apache/iceberg-go/pull/651) was added + +### View Support + +`iceberg-go` now has substantial support for Iceberg views: + +- **View Spec**: [Initial implementation of the View specification](https://github.com/apache/iceberg-go/pull/600) including serialization, deserialization, and JSON validation +- **View Metadata Builder**: [Full view metadata builder](https://github.com/apache/iceberg-go/pull/629) and `UpdateView` method in the REST catalog +- **Load View**: [Load existing views](https://github.com/apache/iceberg-go/pull/640) from catalogs +- **Hive Catalog View Operations**: [View create, load, drop, and list support](https://github.com/apache/iceberg-go/pull/742) in the Hive catalog +- **RCK Compatibility**: [Field ID preservation and error handling](https://github.com/apache/iceberg-go/pull/647) for REST Catalog Kit compatibility + +### Schema Evolution + +- **Schema evolution**: [Full schema evolution support](https://github.com/apache/iceberg-go/pull/596) was added, enabling `AddColumn`, `RenameColumn`, `UpdateColumnType`, and related operations +- **HighestFieldID fixes**: Corrected `HighestFieldID` to [include the List element ID](https://github.com/apache/iceberg-go/pull/609) and [fixed a related bug](https://github.com/apache/iceberg-go/pull/611) + +### Delete File Support + +`iceberg-go` now supports both strategies for deleting rows from Iceberg tables: + +- **Copy-on-Write deletes**: [Implemented `copy-on-write` delete mode](https://github.com/apache/iceberg-go/pull/718) for rewriting data files on delete +- **Merge-on-Read deletes**: [Implemented `merge-on-read` delete mode](https://github.com/apache/iceberg-go/pull/721) for writing position and equality delete files +- **Table overwrite**: [General table overwrite functionality](https://github.com/apache/iceberg-go/pull/674) with a [clean options-based API](https://github.com/apache/iceberg-go/pull/717) +- **Add/replace data files**: [Functions to directly add or replace DataFiles](https://github.com/apache/iceberg-go/pull/723) in a table + +### Hive Catalog + +- **Initial Hive Catalog support**: [Full Hive metastore catalog](https://github.com/apache/iceberg-go/pull/678) was added, supporting table creation, listing, loading, and dropping +- **View operations in Hive**: [View support](https://github.com/apache/iceberg-go/pull/742) was added alongside the table operations + +### Puffin File Format + +A [Puffin reader and writer](https://github.com/apache/iceberg-go/pull/676) was implemented, enabling `iceberg-go` to read and write Puffin statistics files used for table statistics and NDV sketches. + +### Catalog Improvements + +- **AuthManager support**: [Pluggable authentication manager](https://github.com/apache/iceberg-go/pull/579) for the REST catalog, enabling custom credential flows +- **WithHeaders**: [A `WithHeaders` catalog option](https://github.com/apache/iceberg-go/pull/652) allows injecting custom HTTP headers into REST catalog requests +- **Staged table creation**: [Support for staged table creation](https://github.com/apache/iceberg-go/pull/754) in the REST catalog +- **ListNamespaces pagination**: [Pagination support](https://github.com/apache/iceberg-go/pull/694) was added to `ListNamespaces` +- **RegisterTable fix**: [Corrected the `RegisterTable` REST endpoint](https://github.com/apache/iceberg-go/pull/624) +- **renameTable 204 handling**: [Properly handle `204 No Content`](https://github.com/apache/iceberg-go/pull/633) responses on `renameTable` + +### Write Performance + +- **Partitioned write throughput**: [Optimized partitioned write throughput](https://github.com/apache/iceberg-go/pull/622) by reducing allocations in the hot path +- **Gzip metadata**: Support for both [reading](https://github.com/apache/iceberg-go/pull/610) and [writing](https://github.com/apache/iceberg-go/pull/612) gzip-compressed metadata JSON files + +### IO Improvements + +- **IO registry pattern**: [Refactored IO scheme registration](https://github.com/apache/iceberg-go/pull/709) to use a registry pattern, making it easier to add custom IO backends +- **S3 signing**: [Allow `s3.signer.uri` property](https://github.com/apache/iceberg-go/pull/744) and only reject explicit `s3.remote-signing-enabled=true`; also [set `x-amz-content-sha256` before signing](https://github.com/apache/iceberg-go/pull/637) +- **Azure SAS tokens**: [Updated SAS token behaviour](https://github.com/apache/iceberg-go/pull/746) to match the Java implementation + +### Bug Fixes + +Notable bug fixes in this release include: + +- [Fix truncate transform for negative integers](https://github.com/apache/iceberg-go/pull/608) +- [Fix data race in `yieldDataFiles`](https://github.com/apache/iceberg-go/pull/650) +- [Remove partition type cache causing concurrent map write panic](https://github.com/apache/iceberg-go/pull/627) +- [Preserve snapshot log history](https://github.com/apache/iceberg-go/pull/638) +- [Handle missing parent snapshots in `ExpireSnapshots`](https://github.com/apache/iceberg-go/pull/671) +- [Add `AssertRefSnapshotID` requirements to `ExpireSnapshots`](https://github.com/apache/iceberg-go/pull/672) +- [Support INT32/INT64 physical types for decimal columns](https://github.com/apache/iceberg-go/pull/686) +- [Fix decimal literal `MarshalBinary`](https://github.com/apache/iceberg-go/pull/745) +- [Fix index out of range in `buildManifestEvaluator`](https://github.com/apache/iceberg-go/pull/692) +- [Fix response body leaks in the REST catalog](https://github.com/apache/iceberg-go/pull/655) +- [Close writers on error for every exit path](https://github.com/apache/iceberg-go/pull/667) +- [Fix `findMinSeq` from manifest list](https://github.com/apache/iceberg-go/pull/693) + +### Breaking Changes + +Some of these changes are breaking changes that need to be called out: + +- You now need to add `import _ "github.com/apache/iceberg-go/io/gocloud"` to register the storage implementations for S3, GCS, Azure and in-memory blobs. They are no longer registered by default, only the local filesystem implementation exists by default. +- `io.ParseAWSConfig` is now in the `gocloud` package, though it wasn't expected that this would necessarily be used by many consumers anyways. +- The `table.Metadata` interface has two new methods `PartitionSpecByID` and `NextRowID`, any packages that implemented their own Metadata object to meet the interface would need to add these methods. Though it is not expected that consumers would do this. +- The `rest.Catalog.CreateView` function signature has changed ([#629](https://github.com/apache/iceberg-go/pull/629), [#753](https://github.com/apache/iceberg-go/pull/753)) Review Comment: `#753` looks like a new feature for registering views. Is it really a breaking change? I'm not familiar with iceberg-go, so apologies if this question doesn't make sense. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
