Apache Polaris Iceberg catalog with OLake Go
Apache Polaris is an open-source Iceberg REST (representational state transfer) catalog that several engines can share, with its own access control.
Short answer. To write Iceberg tables to Polaris, create an OLake Go destination with catalog_type: polaris, the Polaris REST endpoint, and OAuth2 client credentials or a token. Trino, Spark, DuckDB, ClickHouse, Doris and StarRocks read Polaris as a REST catalog. Snowflake reads it through a read-only catalog integration.
Key takeaways
- Apache Polaris is an open-source Iceberg REST catalog that several engines share, with its own access control.
- OLake Go writes to it with OAuth2 client credentials or a token, and Trino, Spark, DuckDB, ClickHouse, Doris and StarRocks read it.
- Fourteen guides ran end to end on Polaris, including the six Apache Iceberg guides.
Last reviewed October 2026.
How OLake Go writes to Apache Polaris
OLake Go uses change data capture (CDC) where the source has it. It commits Iceberg tables to Polaris over the Iceberg REST protocol. You host Polaris yourself, next to the object storage it points at.
Fourteen guides ran end to end on Polaris: six for Apache Iceberg, six for ClickHouse and two for DuckDB. The Polaris post and the Polaris IAM setup page cover the catalog side.
When to use it
- Several engines should share one open catalog with access control.
- You can run the catalog yourself, in Docker or Kubernetes.
When not to use it
- You want a managed catalog with no server to run. AWS Glue and the vendor catalogs are managed.
- Redshift is a reader. It reaches Polaris only through Lake Formation catalog federation.
What OLake Go needs
catalog_type:polaris- Authentication OLake Go offers: OAuth2 client credentials, Token, None.
- Full destination reference: Apache Polaris setup.
Engines that read Apache Polaris
| Engine | Reads | How |
|---|---|---|
| Amazon Redshift | Partial | Lake Formation catalog federation only |
| Apache Doris | Yes | REST catalog with OAuth2 |
| Apache Spark | Yes | type=rest with OAuth2 |
| ClickHouse | Yes | DataLakeCatalog with catalog_type rest |
| DuckDB | Yes | ATTACH to the REST endpoint |
| Presto | Yes | REST catalog with OAuth2 |
| Snowflake | Yes | catalog integration (read-only) (Not yet tested on this site.) |
| Spark on Amazon EMR | Yes | REST catalog |
| Starburst | Yes | Polaris catalog (public preview in Galaxy) |
| StarRocks | Yes | REST catalog with OAuth2 |
| Trino | Yes | REST catalog with OAuth2 |
Each engine row comes from that engine's vendor documentation. The dated sources are on the engine's page, linked in the first column.
Guides that use Apache Polaris
- Postgres to ClickHouse
- MySQL to ClickHouse
- MongoDB to ClickHouse
- SQL Server to ClickHouse
- DB2 to ClickHouse
- MySQL to DuckDB
- Postgres to DuckDB
- Postgres to Apache Iceberg
- MySQL to Apache Iceberg
- MongoDB to Apache Iceberg
- Oracle to Apache Iceberg
- SQL Server to Apache Iceberg
- Kafka to Apache Iceberg
- Kafka to ClickHouse
Frequently asked questions
How does OLake Go authenticate to Polaris?
With OAuth2 client credentials, a token, or no authentication. The REST catalog page lists the fields.
Which engines read Polaris?
Trino, Spark, DuckDB, ClickHouse, Doris, StarRocks, Presto and Spark on EMR as a REST catalog, Snowflake through a catalog integration, and Starburst Galaxy in public preview.
Is there a tested guide on Polaris?
Yes. The ClickHouse and DuckDB guides listed below ran on Polaris, with Trino reading the same tables.