External Catalog 与 External Schema

External Catalog 和 External Schema 是 Lakehouse 的联邦查询入口,让你用标准 SQL 直接查询外部数据源(Hive、Databricks、Iceberg REST Catalog 等),无需复制数据。

类比:它们像 Lakehouse 的"透视镜"——数据保留在外部系统,但你可以在 Lakehouse 里直接查询或 JOIN。External Catalog 是独立的顶层目录(三层命名

catalog.schema.table
catalog.schema.table
),适合统一管理多个外部系统;External Schema 则是挂载到当前工作空间的快捷方式(两层命名
schema.table
schema.table
),更适合日常查询。

核心特性

零存储开销:数据保留在外部系统(OSS/S3/HDFS),Lakehouse 仅读取元数据和数据文件,不产生存储费用。

只读访问:External Catalog 和 External Schema 下的表仅支持查询(SELECT)和创建视图,不支持 INSERT/UPDATE/DELETE。

实时元数据:通过 HMS(Hive Metastore)或 Databricks API 实时获取元数据,外部表结构变更自动同步。

External Catalog vs External Schema 选型

维度External CatalogExternal Schema
命名方式三层:
catalog.schema.table
catalog.schema.table
两层:
schema.table
schema.table
层级位置独立的顶层目录挂载到当前工作空间的 Schema
适用场景统一管理多个外部系统将单个外部数据库融入现有工作空间
查询示例
SELECT * FROM hive_catalog.sales_db.orders
SELECT * FROM hive_catalog.sales_db.orders
SELECT * FROM hive_sales.orders
SELECT * FROM hive_sales.orders
支持的数据源Hive、Databricks、Iceberg REST Catalog、Snowflake Open CatalogHive、Databricks

何时使用 External Catalog?

场景原因
统一管理多个外部系统三层命名结构清晰,适合多目录管理
跨平台联邦查询同时查询 Hive、Databricks、Snowflake 等多个外部系统
渐进式数据迁移迁移过程中保持业务连续性,验证数据一致性

何时使用 External Schema?

场景原因
日常查询外部 Hive 数据两层命名更简洁,像本地表一样查询
将外部数据库融入现有工作空间挂载到当前 Schema,无需切换 Catalog
历史数据查询数据保留在 Hive,按需查询,无需导入 Lakehouse

何时不该用联邦查询?

场景推荐替代方案原因
频繁查询、数据加工数据同步到 Lakehouse 本地表联邦查询受网络延迟影响,本地表性能更优
需要修改外部数据数据同步任务联邦查询仅支持只读

快速示例

External Catalog:三层命名查询

-- 步骤 1:创建存储连接(指向 OSS) CREATE STORAGE CONNECTION oss_conn TYPE OSS ACCESS_ID = 'LTAI...' ACCESS_KEY = 'T8Ge...' ENDPOINT = 'oss-cn-hangzhou.aliyuncs.com'; -- 步骤 2:创建目录连接(指向 Hive Metastore) CREATE CATALOG CONNECTION hive_conn TYPE HMS HIVE_METASTORE_URIS = 'thrift://192.168.1.100:9083' STORAGE_CONNECTION = 'oss_conn'; -- 步骤 3:创建 External Catalog CREATE EXTERNAL CATALOG hive_catalog CONNECTION hive_conn; -- 步骤 4:查询外部表(三层命名) SELECT * FROM hive_catalog.sales_db.orders LIMIT 5; +----------+---------+--------+---------------------+ | order_id | user_id | amount | order_date | +----------+---------+--------+---------------------+ | 1001 | 501 | 199.00 | 2024-01-15 10:30:00 | | 1002 | 502 | 299.00 | 2024-01-16 14:20:00 | +----------+---------+--------+---------------------+

External Schema:两层命名查询

-- 步骤 1-2:同上(创建 Storage Connection 和 Catalog Connection) -- 步骤 3:创建 External Schema(映射 Hive 的 `sales_db` 数据库) CREATE EXTERNAL SCHEMA hive_sales CONNECTION hive_conn OPTIONS (SCHEMA = 'sales_db'); -- 步骤 4:查询外部表(两层命名,像本地表一样) SELECT * FROM hive_sales.orders LIMIT 5; -- 结果同上

常见问题

常见问题 1:在 External Catalog/Schema 下执行 DML 操作

问题:尝试

INSERT INTO hive_catalog.sales_db.orders VALUES (...)
INSERT INTO hive_catalog.sales_db.orders VALUES (...)

症状:报错

External table does not support DML operations
External table does not support DML operations

解决

  • External Catalog/Schema 下的表仅支持只读查询
  • 如需写入,请先将数据
    INSERT INTO local_table SELECT ... FROM hive_catalog.sales_db.orders
    INSERT INTO local_table SELECT ... FROM hive_catalog.sales_db.orders
    导入本地表

常见问题 2:在 External Schema 下创建或删除表

问题:尝试

CREATE TABLE hive_sales.new_table (...)
CREATE TABLE hive_sales.new_table (...)
DROP TABLE hive_sales.old_table
DROP TABLE hive_sales.old_table

症状:报错

Cannot create/drop table in external schema
Cannot create/drop table in external schema

解决

  • External Schema 是外部数据库的直接映射,表结构由外部系统管理
  • 如需修改表结构,请在外部系统(如 Hive)中操作

常见问题 3:外部表权限无法单独授权

问题:尝试对 External Schema 下的某张表单独授权。

症状:授权失败或无效。

解决

  • 目前 External Schema 下的表不支持单表授权,仅支持
    ALL TABLES
    ALL TABLES
    级别授权
  • 如需细粒度权限控制,请将数据同步到 Lakehouse 本地表

成本影响

存储成本

  • External Catalog/Schema 本身仅存储元数据映射关系,几乎零存储成本
  • 外部数据保留在 OSS/S3/HDFS,按云厂商标准计费

计算成本

  • 查询外部表消耗 VCluster CRU
  • 跨网络查询外部数据可能比本地查询慢,建议将频繁查询的数据同步到本地

生命周期管理

创建 Storage Connection → 创建 Catalog Connection → 创建 External Catalog/Schema → 查询/JOIN → 删除 ↓ ↓ ↓ ↓ 配置存储凭据 配置元数据服务地址 映射外部系统/Database 移除映射(不影响外部数据)

创建和删除

-- 创建 External Catalog CREATE EXTERNAL CATALOG hive_catalog CONNECTION hive_conn; -- 创建 External Schema CREATE EXTERNAL SCHEMA hive_sales CONNECTION hive_conn OPTIONS (SCHEMA = 'sales_db'); -- 查看所有 External Schema(通过 EXTENDED + WHERE 筛选) SHOW SCHEMAS EXTENDED WHERE type = 'external'; -- 查看 External Schema 详情 DESC SCHEMA EXTENDED hive_sales; -- 删除 External Catalog(不影响外部数据) DROP CATALOG hive_catalog; -- 删除 External Schema(不影响外部 Hive 数据库) DROP SCHEMA hive_sales;

相关文档

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