Lakehouse 外部表查询指南(External Table)
概述
外部表(External Table)允许 Lakehouse 直接查询存储在外部系统(如 Delta Lake、Hudi、Kafka)中的数据,无需将数据导入 Lakehouse。外部表仅管理元数据,数据文件仍保留在外部存储中。本指南按业务场景分类,帮助你快速掌握外部表的创建与查询方法。
涉及的 SQL 命令
命令 用途 适用场景 CREATE EXTERNAL TABLE ... USING DELTACREATE EXTERNAL TABLE ... USING DELTA
创建 Delta 外部表 查询 Delta Lake 格式数据 CREATE EXTERNAL TABLE ... USING HUDICREATE EXTERNAL TABLE ... USING HUDI
创建 Hudi 外部表 查询 Apache Hudi 格式数据 CREATE EXTERNAL TABLE ... USING KAFKACREATE EXTERNAL TABLE ... USING KAFKA
创建 Kafka 外部表 实时查询 Kafka 消息流 SELECT * FROM external_tableSELECT * FROM external_table
查询外部表 跨系统联邦查询 DROP EXTERNAL TABLEDROP EXTERNAL TABLE
删除外部表 清理元数据(不影响外部数据)
前置准备
以下示例假设外部数据已存储在对象存储或 Kafka 集群中:
-- 确保已创建对应的 Storage Connection 和 Volume
-- 本指南以 Delta Lake 为例演示外部表创建流程
创建 Delta 外部表
使用
CREATE EXTERNAL TABLECREATE EXTERNAL TABLE
配合
USING DELTAUSING DELTA
挂载 Delta Lake 表。
-- 创建 Delta 外部表
CREATE EXTERNAL TABLE delta_sales
USING DELTA
LOCATION 'volume:my_ext_vol/sales_delta/';
参数说明 :
USING DELTAUSING DELTA
:指定外部数据格式为 Delta Lake。
LOCATIONLOCATION
:指向存储 Delta 文件的 Volume 路径。
💡 提示 :外部表创建后,Lakehouse 会自动从 Delta 日志中读取 Schema,无需手动定义列。
创建 Hudi 外部表
使用
USING HUDIUSING HUDI
挂载 Apache Hudi 表。
-- 创建 Hudi 外部表
CREATE EXTERNAL TABLE hudi_users
USING HUDI
LOCATION 'volume:my_ext_vol/users_hudi/';
适用场景 :
实时数据湖架构,数据由 Flink/Spark 持续写入 Hudi。
需要支持 Upsert 和增量查询的外部数据源。
创建 Kafka 外部表
使用
USING KAFKAUSING KAFKA
将 Kafka Topic 映射为外部表,支持实时 SQL 查询。
-- 创建 Kafka 外部表
CREATE EXTERNAL TABLE kafka_events
USING KAFKA
PROPERTIES (
'bootstrap.servers' = 'kafka-broker:9092',
'subscribe' = 'app_events',
'startingOffsets' = 'latest'
);
⚠️ 注意 :Kafka 外部表仅支持
SELECTSELECT
查询,不支持
INSERTINSERT
/
UPDATEUPDATE
。
查询外部表
外部表创建后,可使用标准 SQL 进行查询,与查询本地表语法完全一致。
-- 查询 Delta 外部表
SELECT product, SUM(amount) as total_sales
FROM delta_sales
GROUP BY product;
-- 查询 Kafka 外部表(实时消息)
SELECT * FROM kafka_events LIMIT 10;
性能说明 :
查询外部表时,Lakehouse 会直接从外部存储读取数据文件,网络延迟可能高于本地表。
建议对外部表频繁查询的数据使用 COPY INTOCOPY INTO
导入到本地表。
删除外部表
使用
DROP EXTERNAL TABLEDROP EXTERNAL TABLE
删除外部表元数据。
-- 删除外部表
DROP EXTERNAL TABLE delta_sales;
💡 提示 :删除外部表仅移除 Lakehouse 中的元数据引用,不会删除外部存储中的实际数据文件。
清理测试数据
完成外部表验证后,建议清理元数据:
-- 删除外部表
DROP EXTERNAL TABLE IF EXISTS delta_sales;
DROP EXTERNAL TABLE IF EXISTS hudi_users;
DROP EXTERNAL TABLE IF EXISTS kafka_events;
注意事项
只读访问 :外部表仅支持查询,不支持 INSERTINSERT
、UPDATEUPDATE
、DELETEDELETE
等写入操作。
Schema 同步 :外部表 Schema 由外部系统管理。如果外部表结构变更,需执行 REFRESHREFRESH
或重建外部表。
网络连通 :查询外部表需确保 Lakehouse 与外部存储(OSS/S3/Kafka)之间的网络连通。
格式支持 :目前支持 Delta Lake、Hudi、Kafka 等主流外部格式。Parquet/ORC 文件建议通过 Volume 直接查询或 COPY INTOCOPY INTO
导入。
权限要求 :创建外部表需要对底层 Volume 或 Kafka 具有读取权限。
相关文档