External Catalog

External Catalog 是 Lakehouse 中的目录对象,映射外部数据系统(Hive、Databricks、Snowflake Iceberg 等)的数据库结构,让用户通过标准 SQL 直接查询外部数据,无需复制数据。

什么是 External Catalog

External Catalog 是 Lakehouse 中的目录对象,映射外部数据系统的数据库结构。通过 External Catalog,用户可以:

  • 在 Lakehouse 中执行只读查询访问外部数据
  • 将外部数据导入 Lakehouse 构建统一数据湖
  • 统一管理多个数据源的元数据

核心特点

  • 只读访问:External Catalog 仅支持查询,不支持修改外部数据
  • 无需复制:数据保留在外部系统中,Lakehouse 仅读取元数据和数据文件
  • 统一入口:通过标准 SQL 查询外部数据,如同查询本地表

架构原理

Lakehouse External Data Source +------------------------+ +---------------------------+ | | | | | SQL Query Engine | | Hive Metastore | | | | or Iceberg | | SELECT * FROM |--- query -> REST Catalog | | ext_catalog.schema | | or Databricks | | .table | | | | | | | | Catalog Connection |--- auth --> Data Files | | (credentials) | | (OSS/S3/HDFS) | +------------------------+ +---------------------------+

与数据同步的对比

维度External Catalog数据同步
数据位置保留在外部系统复制到 Lakehouse
查询延迟取决于网络和数据源性能本地查询,性能更优
存储成本不占用 Lakehouse 存储占用 Lakehouse 存储
数据一致性实时(直接读外部数据)有延迟(取决于同步频率)
适用场景临时查询、数据探索、联邦分析频繁查询、数据加工、数仓建设

支持的数据源

数据源连接方式说明
Apache HiveHive Metastore URIs通过 Hive Metastore 访问 Hive 表
Databricks Unity CatalogDatabricks API访问 Databricks 中的表
Iceberg REST CatalogIceberg REST Catalog API连接任意符合 Iceberg REST Catalog 标准的外部目录
Snowflake Open CatalogIceberg REST Catalog + OAuth访问 Snowflake 中的 Iceberg 表

通用 Iceberg REST Catalog 说明

Lakehouse 支持通过 Iceberg REST Catalog 协议连接任何符合该标准的外部目录服务,不限于 Snowflake。常见的应用场景包括:

  • 连接自建的 Iceberg REST Catalog 服务
  • 连接第三方数据平台的 Iceberg Catalog
  • 连接 Dremio、Polaris、Unity Catalog 等其他支持 Iceberg REST API 的服务

连接架构

Lakehouse Iceberg REST Catalog +------------------------+ +----------------------------------+ | | | | | SQL Query Engine | | Any Iceberg REST Catalog | | | | (self-hosted / third-party) | | SELECT * FROM |--- REST API -----> Iceberg Metadata | | iceberg_catalog | | | | .schema.table | | | | | | | | Catalog Connection |--- Auth ---------> Data Files | | (credentials) | | (OSS/S3/HDFS/GCS) | +------------------------+ +----------------------------------+

连接步骤

  1. 创建 Storage Connection(指定底层存储类型:OSS/S3/HDFS 等)
  2. 创建 Catalog Connection(
    TYPE ICEBERG_REST
    TYPE ICEBERG_REST
    ,配置 URI 和认证信息)
  3. 创建 External Catalog

详细配置指南利用 External Catalog 访问 Snowflake OpenCatalog 的 Iceberg 表

Snowflake Open Catalog 说明

Snowflake Open Catalog 是基于 Iceberg REST Catalog 协议的具体实现。Lakehouse 通过 Iceberg REST Catalog 协议连接 Snowflake Open Catalog,实现跨平台数据联邦查询。

连接架构

Lakehouse Snowflake Open Catalog +------------------------+ +----------------------------------+ | | | | | SQL Query Engine | | Polaris Catalog (Iceberg REST) | | | | | | SELECT * FROM |--- REST API -----> Iceberg Metadata | | snowflake_catalog | | | | .schema.table | | | | | | | | Catalog Connection |--- OAuth ---------> S3 Data Files | | (OAuth credentials) | | (Snowflake 托管存储) | +------------------------+ +----------------------------------+

使用限制

  • 仅支持只读查询,不支持写入和更新操作
  • 外部表名必须与 Snowflake 中的源表名完全匹配(小写)
  • 在 Snowflake 侧需开启 Credential Vending 配置

详细配置指南利用 External Catalog 访问 Snowflake OpenCatalog 的 Iceberg 表

关键配置参数

参数说明示例
TYPE连接类型,固定为
ICEBERG_REST
ICEBERG_REST
ICEBERG_REST
ICEBERG_REST
URIPolaris API 端点或自定义 REST Catalog 地址
https://account.snowflakecomputing.com/polaris/api/catalog
https://account.snowflakecomputing.com/polaris/api/catalog
OAUTH_CLIENT_IDOAuth 客户端 ID在 Service Connection 创建时获取
OAUTH_CLIENT_SECRETOAuth 客户端密钥在 Service Connection 创建时获取
NAMESPACECatalog 命名空间
my_catalog.my_schema
my_catalog.my_schema
WAREHOUSECatalog 名称
my_warehouse
my_warehouse

使用限制

  • 仅支持只读查询,不支持写入和更新操作
  • 外部表名必须与 Snowflake 中的源表名完全匹配(小写)
  • 在 Snowflake 侧需开启 Credential Vending 配置

详细配置指南利用 External Catalog 访问 Snowflake OpenCatalog 的 Iceberg 表

核心概念

Catalog Connection

Catalog Connection 是连接外部数据源的安全对象,包含:

  • 外部数据源的访问地址
  • 认证信息(Access Key、Secret Key、OAuth Token 等)
  • 网络配置(是否需要 PrivateLink)

External Catalog

External Catalog 是基于 Catalog Connection 创建的目录对象,镜像了外部数据源的数据库结构:

  • External Catalog → 外部数据库/命名空间
  • External Schema → 外部 Schema
  • External Table → 外部表

External Schema

External Schema 是 External Catalog 下的命名空间,对应外部数据源中的 Schema/Database。

External Table

External Table 是 External Schema 下的表对象,对应外部数据源中的表。查询 External Table 时,Lakehouse 会:

  1. 从外部 Metastore 获取表的元数据(列定义、存储位置等)
  2. 直接从外部存储(OSS/S3/HDFS)读取数据文件
  3. 在 Lakehouse 引擎中执行查询计算

典型应用场景

场景 1:历史数据查询

企业将历史数据保留在 Hive 中,通过 External Catalog 查询历史数据:

  • 无需将大量历史数据导入 Lakehouse
  • 按需查询,节省存储成本
  • 统一 SQL 接口,无需学习新工具

场景 2:跨平台数据联邦

同时查询 Lakehouse 本地数据和 Databricks 中的数据:

-- 关联查询本地表和外部表 SELECT l.order_id, l.amount, e.customer_name FROM local_orders l JOIN databricks_catalog.sales_schema.customers e ON l.customer_id = e.customer_id;

场景 3:数据迁移前的验证

在将数据从外部系统迁移到 Lakehouse 之前:

  • 通过 External Catalog 验证数据完整性
  • 对比迁移前后的数据一致性
  • 确认数据质量后再执行迁移

操作流程

1. Create Storage Connection | v 2. Create Catalog Connection | v 3. Create External Catalog | v 4. Query external data: SELECT * FROM ext_catalog.schema.table

权限管理

  • 目前创建的 External Catalog 只有
    instance_admin
    instance_admin
    角色可以查询
  • 需要通过 Catalog Connection 的认证信息访问外部数据源
  • 外部数据源本身也需要配置相应的访问权限

注意事项

  • 只读访问:External Catalog 不支持 INSERT/UPDATE/DELETE 操作
  • 性能考虑:跨网络查询外部数据可能比本地查询慢
  • 认证安全:Catalog Connection 包含敏感认证信息,需妥善保管
  • 网络连通:确保 Lakehouse 与外部数据源之间的网络连通

典型操作示例

以下示例基于真实环境执行,使用

clickzetta_sample_data
clickzetta_sample_data
(SHARED 类型)和
databricks_main_catalog
databricks_main_catalog
(EXTERNAL 类型)演示常见操作。

1. 查看所有 Catalog

SHOW CATALOGS; +----------------------------+-------------------------+----------+ | workspace_name | created_time | category | +----------------------------+-------------------------+----------+ | clickzetta_sample_data | 2025-01-15 10:27:21.738 | SHARED | | databricks_main_catalog | 2025-11-20 12:00:49.498 | EXTERNAL | | ns227206 | 2025-01-15 10:29:17.425 | MANAGED | +----------------------------+-------------------------+----------+

category
category
字段说明:
MANAGED
MANAGED
为本地托管 Catalog,
SHARED
SHARED
为共享数据集,
EXTERNAL
EXTERNAL
为外部 Catalog。

2. 查看 External Catalog 详情

DESC CATALOG databricks_main_catalog; +--------------------+-------------------------+ | info_name | info_value | +--------------------+-------------------------+ | name | databricks_main_catalog | | creator | qiliang | | created_time | 2025-11-20 12:00:49.498 | | last_modified_time | 2025-11-20 12:00:49.498 | | comment | | | type | external | | connection_name | qiliang_databricks_conn | | origin_catalog | main | +--------------------+-------------------------+

connection_name
connection_name
是该 Catalog 使用的 Catalog Connection 名称,
origin_catalog
origin_catalog
是外部系统中对应的 Catalog 名称。

3. 浏览 Catalog 结构

-- 查看 Catalog 下的 Schema 列表 SHOW SCHEMAS IN clickzetta_sample_data; +---------------------------+ | schema_name | +---------------------------+ | ecommerce_events_history | | tpcds_10tb | | tpch_100g | | nyc_taxi_tripdata | +---------------------------+ -- 查看 Schema 下的表列表 SHOW TABLES IN clickzetta_sample_data.tpch_100g;

4. 查询外部 Catalog 中的表

使用三层命名结构

catalog_name.schema_name.table_name
catalog_name.schema_name.table_name
直接查询外部数据:

SELECT * FROM clickzetta_sample_data.tpch_100g.region LIMIT 5; +-------------+-------------+------------------------------------------------------+ | r_regionkey | r_name | r_comment | +-------------+-------------+------------------------------------------------------+ | 0 | AFRICA | lar deposits. blithely final packages cajole. reg... | | 1 | AMERICA | hs use ironic, even requests. s | | 2 | ASIA | ges. thinly even pinto beans ca | | 3 | EUROPE | ly final courts cajole furiously final excuse | | 4 | MIDDLE EAST | uickly special accounts cajole carefully blithely... | +-------------+-------------+------------------------------------------------------+

5. 跨 Catalog 联合查询

将外部 Catalog 中的表与 Lakehouse 本地表进行 JOIN,无需提前复制数据:

-- 关联外部 Catalog 中的 region 表和 nation 表,统计各大洲的国家数量 SELECT r.r_name AS region_name, COUNT(n.n_nationkey) AS nation_count FROM clickzetta_sample_data.tpch_100g.region r JOIN clickzetta_sample_data.tpch_100g.nation n ON r.r_regionkey = n.n_regionkey GROUP BY r.r_name ORDER BY nation_count DESC;

跨平台联邦查询示例(本地表 JOIN 外部 Catalog 表):

-- 将 Lakehouse 本地订单表与外部 Catalog 中的客户维度表关联 SELECT o.order_id, o.amount, c.c_name AS customer_name, c.c_nation AS customer_nation FROM local_schema.orders o JOIN ext_hive_catalog.sales_schema.customers c ON o.customer_id = c.c_custkey WHERE o.order_date >= '2024-01-01' LIMIT 10; -- 注意:ext_hive_catalog 需提前通过 CREATE EXTERNAL CATALOG 注册

相关文档

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