利用 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 的连接:

CREATE CATALOG CONNECTION snow_opencatalog 
    TYPE ICEBERG_REST 
    URI='https://lhnrdre-derekmeng.snowflakecomputing.com/polaris/api/catalog'
    ACCESS_REGION = 'ap-southeast-1' 
    OAUTH_CLIENT_ID='d3r3cuhHitrI+fUpFtvXxxxxxxx'
    OAUTH_CLIENT_SECRET='gY3ZWOGoSMM1tKK7QaqQYKpSdTcPY1ruVv7xxxxxxx'
    OAUTH_SCOPE='PRINCIPAL_ROLE:ALL'
    NAMESPACE='ICEBERG_TABLES_DB_FLATTEN_ICEBERG_SCHEMA'
    WAREHOUSE='singdata'
    WITH PROPERTIES (
        'client.region'='ap-southeast-1',
        'io-impl'='org.apache.iceberg.aws.s3.S3FileIO'
    );
参数说明示例
TYPE连接类型,固定为 ICEBERG_RESTICEBERG_REST
URISnowflake Polaris API 端点https://account.snowflakecomputing.com/polaris/api/catalog
ACCESS_REGION访问对象所在的区域ap-southeast-1
OAUTH_CLIENT_IDOAuth 客户端 ID在 Snowflake Open Catalog 创建 Service connection 时获取
OAUTH_CLIENT_SECRETOAuth 客户端密钥在 Snowflake Open Catalog 创建 Service connection 时获取
OAUTH_SCOPEOAuth 授权范围PRINCIPAL_ROLE:ALL
NAMESPACESnowflake Open Catalog 中第二个层级ICEBERG_TABLES_DB_FLATTEN_ICEBERG_SCHEMA
WAREHOUSESnowflake Open Catalog 的 Catalog 名称singdata

步骤 2:创建外部表

创建外部表来映射 Snowflake Open Catalog 中的表:

-- 创建外表,映射 Snowflake Open Catalog 中的表(表名需一致)
CREATE EXTERNAL TABLE IF NOT EXISTS `czcustomer`
USING ICEBERG 
CONNECTION snow_opencatalog;

步骤 3:验证和查询

验证表结构并查询数据:

-- 查看表结构
DESC EXTENDED `czcustomer`;

-- 查询数据
SELECT * FROM `czcustomer` LIMIT 10;

使用限制:

  • 连接基于 S3 的 Snowflake Managed Iceberg Table,不支持写入和更新操作
  • 外部表名必须与 Snowflake 中的源表名完全匹配
  • 暂时仅支持小写表名
  • 不支持表名转换
  • 在目标 Catalog 服务侧,需要开启 Credential Vending 配置

联系我们
预约咨询
微信咨询
电话咨询