利用 External Catalog 访问 Snowflake OpenCatalog 的 Iceberg 表
概述
Lakehouse 支持通过 Catalog Integration 功能连接第三方的 Iceberg REST API,实现与外部数据目录的无缝集成。本文档介绍如何连接和使用 Snowflake 的 Open Catalog 功能。
功能特性:
- 统一数据访问:通过统一的接口访问 Snowflake Open Catalog 中的 Iceberg 表
- 实时数据同步:直接读取 Snowflake 中的最新数据,无需数据复制
- 元数据映射:自动映射 Snowflake 中的表结构和元数据信息
- OAuth 认证:支持安全的 OAuth 2.0 认证机制
环境准备:
Snowflake Open Catalog 提供了两种类型的目录:
Internal Catalog:
- 功能特性: Lakehouse 支持完整的读写操作
- 数据管理: 支持表结构变更、数据插入、更新、删除等全生命周期操作
External Catalog:
- 功能特性: Lakehouse 仅支持只读操作
- 数据访问: 支持复杂查询、联表分析,但不支持数据修改操作
在 Snowflake 中准备 Iceberg 表,并注册到Snowflake Open Catalog 中,请参考 Snowflake 官方文档
实现效果:在 Snowflake Open Catalog 中,注册了一张在 Snowflake 引擎中:
- Database 名称: ICEBERG_TABLES_DB_FLATTEN
- Schema 名称:ICEBERG_SCHEMA
- Iceberg 表名:czcustomer (要求小写。Snowflake 的建表 DDL 中,用双引号避免表名自动转成大写)
配置步骤:
步骤 1:创建 Catalog Connection
使用以下 SQL 语句创建与 Snowflake Open Catalog 的连接:
参数 | 说明 | 示例 |
---|---|---|
TYPE | 连接类型,固定为 ICEBERG_REST | ICEBERG_REST |
URI | Snowflake Polaris API 端点 | https://account.snowflakecomputing.com/polaris/api/catalog |
ACCESS_REGION | 访问对象所在的区域 | ap-southeast-1 |
OAUTH_CLIENT_ID | OAuth 客户端 ID | 在 Snowflake Open Catalog 创建 Service connection 时获取 |
OAUTH_CLIENT_SECRET | OAuth 客户端密钥 | 在 Snowflake Open Catalog 创建 Service connection 时获取 |
OAUTH_SCOPE | OAuth 授权范围 | PRINCIPAL_ROLE:ALL |
NAMESPACE | Snowflake Open Catalog 中第二个层级 | ICEBERG_TABLES_DB_FLATTEN_ICEBERG_SCHEMA |
WAREHOUSE | Snowflake Open Catalog 的 Catalog 名称 | singdata |
步骤 2:创建外部表
创建外部表来映射 Snowflake Open Catalog 中的表:
步骤 3:验证和查询
验证表结构并查询数据:
使用限制:
- 连接基于 S3 的 Snowflake Managed Iceberg Table,不支持写入和更新操作
- 外部表名必须与 Snowflake 中的源表名完全匹配
- 暂时仅支持小写表名
- 不支持表名转换
- 在目标 Catalog 服务侧,需要开启 Credential Vending 配置
联系我们