Snowflake and Apache Iceberg: OLake Go guides
Snowflake queries Apache Iceberg tables in place. A database that OLake Go replicates into Iceberg shows up in Snowflake with no load job.
Short answer. To replicate Postgres, MySQL, MongoDB or another database to Snowflake, run OLake Go with Snowflake Horizon as the Iceberg catalog. The tables appear as Snowflake-managed Iceberg tables. Add Snowflake as a target query engine and OLake Go writes deletion vectors, which Snowflake reads.
Key takeaways
- OLake Go writes through Snowflake Horizon, so the tables appear in Snowflake with no load job.
- With Snowflake as a target query engine, OLake Go writes deletion vectors, which Snowflake reads.
- Nine guides ran end to end on Horizon, and Spark, DuckDB or Trino can open the same copy of the data.
Last reviewed October 2026.
How OLake Go gets data into Snowflake
OLake Go is an open-source replication tool. It copies a source database into Iceberg tables, with change data capture (CDC) where the source has it. Snowflake reads them through Horizon, or through a read-only catalog integration for AWS Glue and the other REST (representational state transfer) catalogs.
Each guide below ran end to end on Horizon. The same pages document Glue as a second option. Source setup lives on the connector pages, for example Postgres and MongoDB.
When to use it
- Snowflake is the main reader, and Spark, DuckDB or Trino should open the same copy of the data.
- You want CDC from Postgres, MySQL, MariaDB, MongoDB or SQL Server into Snowflake with no load job.
When not to use it
- The source is Oracle, DB2 or S3 and you need row-level CDC. OLake Go reads those sources incrementally.
- The catalog is Hive Metastore or JDBC. Snowflake has no catalog integration for either one.
Catalogs Snowflake reads
| Catalog | Snowflake reads | How |
|---|---|---|
| AWS Glue | Yes | catalog integration (read-only) |
| Apache Polaris | Yes | catalog integration (read-only) (Not yet tested on this site.) |
| Lakekeeper | Yes | catalog integration (read-only) (Not yet tested on this site.) |
| Snowflake Horizon | Yes | native: tables are Snowflake-managed Iceberg tables |
| Unity Catalog | Yes | catalog integration (read-only) (Not yet tested on this site.) |
| BigLake (Google Cloud Lakehouse) | Yes | catalog integration (read-only) (Not yet tested on this site.) |
| Amazon S3 Tables | Yes | catalog integration (read-only) (Not yet tested on this site.) |
| Nessie | Yes | catalog integration (read-only) (Not yet tested on this site.) |
| Hive Metastore | No | no catalog integration for Hive Metastore |
| JDBC | No | no catalog integration for JDBC catalogs |
Delete formats Snowflake reads
| Equality deletes (v2) | Positional deletes (v2) | Deletion vectors (v3) |
|---|---|---|
| No | Yes | Yes |
Snowflake reads positional deletes on Iceberg v2 tables and deletion vectors on v3 tables. Equality delete files are not supported, so never leave an OLake Go job on the default equality-delete upsert type when Snowflake reads the table. Set Snowflake as a target query engine on the OLake Go job and OLake Go picks a format it reads; with Snowflake as the only reader that is deletion vectors (v3).
Sources: Snowflake: Apache Iceberg tables (row-level deletes) (checked 2026-10-12); Snowflake: Horizon Catalog, Iceberg REST API for external engines (checked 2026-10-14); Snowflake release note: Horizon external writes GA (checked 2026-10-12).
Tested guides for Snowflake
- Postgres to Snowflake
- MySQL to Snowflake
- MongoDB to Snowflake
- Oracle to Snowflake
- SQL Server to Snowflake
- DB2 to Snowflake
- MariaDB to Snowflake
- Kafka to Snowflake
- S3 to Snowflake
Frequently asked questions
Can Snowflake read Iceberg tables with equality deletes?
No. Snowflake reads positional deletes on Iceberg v2 tables and deletion vectors on v3 tables. Set Snowflake as a target query engine on the OLake Go job so it never writes equality deletes.
Which catalog should OLake Go write to for Snowflake?
Snowflake Horizon. The tables become Snowflake-managed Iceberg tables with no extra registration step. AWS Glue also works, through a read-only catalog integration.
Can other engines read the same tables?
Yes. Spark, DuckDB, Trino and ClickHouse read Horizon through its Iceberg REST endpoint. The compatibility matrix lists every engine.