DataLakeCatalog database engine with catalog_type = 'horizon'.
Horizon is related to, but not the same as, Snowflake Open Catalog / self-hosted Polaris:
As this feature is beta, enable it with:
SET allow_experimental_database_iceberg = 1;
(or SET allow_database_iceberg = 1; depending on your ClickHouse version).Prerequisites
- A Snowflake account with Snowflake-managed Iceberg tables
- Horizon Iceberg REST endpoint:
https://<organization>-<account>.snowflakecomputing.com/polaris/api/catalog - A Snowflake role with privileges on the Iceberg tables (and write privileges if you will INSERT)
- Authentication via one of:
- Programmatic Access Token (PAT)
- Key-pair JWT exchanged for an access token
- External OAuth access token (as bearer
auth_header)
- Object storage reachable from ClickHouse (vended credentials are recommended)
- ClickHouse with DataLakeCatalog Iceberg support
Creating a connection
Option A: Programmatic Access Token (recommended)
warehouse must be the Snowflake database name (not a Snowflake virtual warehouse).
Unquoted Snowflake identifiers are uppercase.
Option B: Pre-exchanged bearer access token
Query Iceberg tables
Namespace (schema) and table are typically addressed as
`SCHEMA.table` unless
experimental table namespaces are enabled.Write path
With a role that has INSERT/UPDATE/DELETE (and CREATE ICEBERG TABLE when creating tables), ClickHouse can write through the same catalog:CREATE TABLE syntax follows ClickHouse Iceberg / DataLakeCatalog write support for REST catalogs
on your version; privilege failures from Snowflake surface as catalog HTTP errors.