No description
  • Go 98.9%
  • Python 0.5%
  • Shell 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Quentin Laplanche 0c36baa48a
chore: pin GitHub Actions to commit SHA (#6)
-e
Signed-off-by: Quentin Laplanche <quentin.laplanche@docker.com>

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-06-04 14:17:17 -04:00
.github CI: Use specific patch versions in workflow action comments (#1032) 2026-05-06 15:34:35 -04:00
catalog feat(table): support zstd metadata compression codec (#1020) 2026-05-07 15:26:32 -04:00
cmd/iceberg feat(catalog): hadoop cli integration (#1034) 2026-05-07 14:17:39 -04:00
config feat(config,cmd/iceberg): support more rest options in config (#933) 2026-04-23 12:46:01 -04:00
dev feat: puffin Reader and Writer (#676) 2026-02-24 11:25:18 -05:00
internal feat(catalog): hadoop list drop rename operations (#970) 2026-05-07 12:17:27 -04:00
io feat(io): add native in-memory FS (#1025) 2026-05-06 12:28:58 -04:00
puffin feat: puffin Reader and Writer (#676) 2026-02-24 11:25:18 -05:00
table feat(table): support zstd metadata compression codec (#1020) 2026-05-07 15:26:32 -04:00
utils ci(golangci-lint) :Add golangci linter (#315) 2025-03-04 18:04:05 -05:00
view fix(view): field ID preservation and error handling for RCK compatibility (#647) 2025-12-09 12:24:55 -05:00
website docs(website): add generator scaffold for example-driven concept pages (#920) 2026-04-21 13:29:22 -04:00
.asf.yaml infra: automatically delete head branches after merge (#634) 2025-11-30 15:19:18 -05:00
.gitattributes feat: schema and types (#1) 2023-08-16 07:48:37 +02:00
.gitignore feat: add support for azure blob with connection string/sas token/account key (#313) 2025-04-02 13:37:52 -04:00
.golangci.yml feat(ci): enable govet for lint (#706) 2026-01-28 16:32:55 -05:00
.pre-commit-config.yaml chore: clean up pre-commit (#705) 2026-01-28 15:30:27 -05:00
CONTRIBUTING.md docs: expand CONTRIBUTING.md with issue claiming and PR guidelines (#887) 2026-04-13 14:51:22 -04:00
errors.go fix(metadata): wrap errors with exported types (#597) 2025-10-09 13:53:03 -04:00
exprs.go feat(table): export StructLike and GetPartitionRecord (#791) 2026-03-17 13:18:27 -04:00
exprs_test.go ci(golangci-lint) :Add golangci linter (#315) 2025-03-04 18:04:05 -05:00
go.mod feat(table): support zstd metadata compression codec (#1020) 2026-05-07 15:26:32 -04:00
go.sum refactor(cli): migrate from docopt-go to go-arg (#965) (#980) 2026-05-05 11:29:37 -04:00
LICENSE ci: Quick update for release_rc.sh and the LICENSE (#201) 2024-11-13 07:44:45 +01:00
literals.go fix(literals): decimal literal marshalbinary (#745) 2026-02-19 21:11:42 -05:00
literals_test.go fix(literals): decimal literal marshalbinary (#745) 2026-02-19 21:11:42 -05:00
Makefile feat(catalog): hadoop list drop rename operations (#970) 2026-05-07 12:17:27 -04:00
manifest.go fix(manifest): allow ManifestListWriter to reference lower-version manifests (#1030) 2026-05-06 15:34:54 -04:00
manifest_test.go fix(manifest): allow ManifestListWriter to reference lower-version manifests (#1030) 2026-05-06 15:34:54 -04:00
metadata_columns.go feat(table): reject reserved metadata column IDs in user schemas (#821) 2026-04-15 18:27:27 -04:00
name_mapping.go feat(metadata): verify timestamps in snapshot & metadata log (#578) 2025-09-26 14:53:44 -04:00
name_mapping_test.go feat(name_mapping): Add UpdateNameMapping function (#521) 2025-08-07 13:02:39 -04:00
NOTICE chore: Update copyright year in NOTICE file (#771) 2026-03-05 13:08:20 -08:00
operation_string.go feat(exprs): Adding BooleanExpressions and Predicates (#91) 2024-06-25 18:51:07 +02:00
partitions.go feat(table)!: multi-arg transforms in partition and sort fields (#824) 2026-04-03 13:16:08 -04:00
partitions_bench_test.go feat(table)!: multi-arg transforms in partition and sort fields (#824) 2026-04-03 13:16:08 -04:00
partitions_test.go feat(table)!: multi-arg transforms in partition and sort fields (#824) 2026-04-03 13:16:08 -04:00
predicates.go ci(golangci-lint) :Add golangci linter (#315) 2025-03-04 18:04:05 -05:00
README.md feat(catalog): hadoop cli integration (#1034) 2026-05-07 14:17:39 -04:00
schema.go fix(schema): data race in MarshalJSON on shared *Schema (#967) 2026-05-01 12:58:20 -04:00
schema_conversions.go feat(avro): replace hamba/avro with twmb/avro v1.5.0 (#871) 2026-04-14 12:23:33 -04:00
schema_conversions_test.go feat(avro): replace hamba/avro with twmb/avro v1.5.0 (#871) 2026-04-14 12:23:33 -04:00
schema_test.go fix(schema): reject duplicate field IDs at schema construction (#879) 2026-04-13 15:31:36 -04:00
transforms.go fix: use floored division in HourTransform for pre-epoch timestamps (#924) (#926) 2026-04-22 16:14:51 -04:00
transforms_test.go fix: use floored division in HourTransform for pre-epoch timestamps (#924) (#926) 2026-04-22 16:14:51 -04:00
types.go fix: use floored division in HourTransform for pre-epoch timestamps (#924) (#926) 2026-04-22 16:14:51 -04:00
types_test.go feat(table): retry doCommit on commit-conflict errors (#830) (#912) 2026-04-20 16:25:24 -04:00
utils.go feat(table): export StructLike and GetPartitionRecord (#791) 2026-03-17 13:18:27 -04:00
visitors.go fix: data races in exprEvaluator.Eval and manifestEvalVisitor.Eval (#954) 2026-04-29 16:36:33 -04:00
visitors_test.go ci(golangci-lint) :Add golangci linter (#315) 2025-03-04 18:04:05 -05:00

Iceberg Golang

Go Reference

iceberg is a Golang implementation of the Iceberg table spec.

Build From Source

Prerequisites

  • Go 1.25 or later

Build

$ git clone https://github.com/apache/iceberg-go.git
$ cd iceberg-go/cmd/iceberg && go build .

Running Tests

Use the Makefile so commands stay in sync with CI (e.g. golangci-lint version).

Unit tests

make test

Linting

make lint

Install the linter first

make lint-install
# or: go install github.com/golangci/golangci-lint/cmd/golangci-lint@v2.8.0

Integration tests

Prerequisites: Docker, Docker Compose

  1. Start the Docker containers using docker compose:

    make integration-setup
    
  2. Export the required environment variables:

    export AWS_S3_ENDPOINT=http://$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' minio):9000
    export AWS_REGION=us-east-1
    export SPARK_CONTAINER_ID=$(docker ps -qf 'name=spark-iceberg')
    export DOCKER_API_VER=$(docker version -f '{{.Server.APIVersion}}')
    
  3. Run the integration tests:

    make integration-test
    

    Or run a single suite: make integration-scanner, make integration-io, make integration-rest, make integration-spark.

Feature Support / Roadmap

FileSystem Support

Filesystem Type Supported
S3 X
Google Cloud Storage X
Azure Blob Storage X
Local Filesystem X

Metadata

Operation Supported
Get Schema X
Get Snapshots X
Get Sort Orders X
Get Partition Specs X
Get Manifests X
Create New Manifests X
Plan Scan x
Plan Scan for Snapshot x

Catalog Support

Operation REST Hive Glue SQL Hadoop
Load Table X X X X X
List Tables X X X X X
Create Table X X X X X
Register Table X X X
Update Current Snapshot X X X X X
Create New Snapshot X X X X X
Rename Table X X X X
Drop Table X X X X X
Alter Table X X X X X
Check Table Exists X X X X X
Set Table Properties X X X X X
List Namespaces X X X X X
Create Namespace X X X X X
Check Namespace Exists X X X X X
Drop Namespace X X X X X
Update Namespace Properties X X X X
Create View X X X
Load View X X
List View X X X
Drop View X X X
Check View Exists X X X

Read/Write Data Support

  • Data can currently be read as an Arrow Table or as a stream of Arrow record batches.

Supported Write Operations

As long as the FileSystem is supported and the Catalog supports altering the table, the following tracks the current write support:

Operation Supported
Append Stream X
Append Data Files X
Rewrite Files
Rewrite manifests
Overwrite Files X
Copy-On-Write Delete X
Write Pos Delete X
Write Eq Delete
Row Delta

CLI Usage

Run go build ./cmd/iceberg from the root of this repository to build the CLI executable, alternately you can run go install github.com/apache/iceberg-go/cmd/iceberg@latest to install it to the bin directory of your GOPATH.

The iceberg CLI usage is very similar to pyiceberg CLI
You can pass the catalog URI with --uri argument.

Example: You can start the Iceberg REST API docker image which runs on default in port 8181

docker pull apache/iceberg-rest-fixture:latest
docker run -p 8181:8181 apache/iceberg-rest-fixture:latest

and run the iceberg CLI pointing to the REST API server.

 ./iceberg --uri http://0.0.0.0:8181 list
┌─────┐
| IDs |
| --- |
└─────┘

Create Namespace

./iceberg --uri http://0.0.0.0:8181 create namespace taxitrips

List Namespace

 ./iceberg --uri http://0.0.0.0:8181 list
┌───────────┐
| IDs       |
| --------- |
| taxitrips |
└───────────┘


Get in Touch