Lakehouse 外部表查询指南(External Table)

概述

外部表(External Table)允许 Lakehouse 直接查询存储在外部系统(如 Delta Lake、Hudi、Kafka)中的数据,无需将数据导入 Lakehouse。外部表仅管理元数据,数据文件仍保留在外部存储中。本指南按业务场景分类,帮助你快速掌握外部表的创建与查询方法。

涉及的 SQL 命令

命令用途适用场景
CREATE EXTERNAL TABLE ... USING DELTA
CREATE EXTERNAL TABLE ... USING DELTA
创建 Delta 外部表查询 Delta Lake 格式数据
CREATE EXTERNAL TABLE ... USING HUDI
CREATE EXTERNAL TABLE ... USING HUDI
创建 Hudi 外部表查询 Apache Hudi 格式数据
CREATE EXTERNAL TABLE ... USING KAFKA
CREATE EXTERNAL TABLE ... USING KAFKA
创建 Kafka 外部表实时查询 Kafka 消息流
SELECT * FROM external_table
SELECT * FROM external_table
查询外部表跨系统联邦查询
DROP EXTERNAL TABLE
DROP EXTERNAL TABLE
删除外部表清理元数据(不影响外部数据)

前置准备

以下示例假设外部数据已存储在对象存储或 Kafka 集群中:

-- 确保已创建对应的 Storage Connection 和 Volume -- 本指南以 Delta Lake 为例演示外部表创建流程


创建 Delta 外部表

使用

CREATE EXTERNAL TABLE
CREATE EXTERNAL TABLE
配合
USING DELTA
USING DELTA
挂载 Delta Lake 表。

-- 创建 Delta 外部表 CREATE EXTERNAL TABLE delta_sales USING DELTA LOCATION 'volume:my_ext_vol/sales_delta/';

参数说明

  • USING DELTA
    USING DELTA
    :指定外部数据格式为 Delta Lake。
  • LOCATION
    LOCATION
    :指向存储 Delta 文件的 Volume 路径。

创建 Hudi 外部表

使用

USING HUDI
USING HUDI
挂载 Apache Hudi 表。

-- 创建 Hudi 外部表 CREATE EXTERNAL TABLE hudi_users USING HUDI LOCATION 'volume:my_ext_vol/users_hudi/';

适用场景

  • 实时数据湖架构,数据由 Flink/Spark 持续写入 Hudi。
  • 需要支持 Upsert 和增量查询的外部数据源。

创建 Kafka 外部表

使用

USING KAFKA
USING KAFKA
将 Kafka Topic 映射为外部表,支持实时 SQL 查询。

-- 创建 Kafka 外部表 CREATE EXTERNAL TABLE kafka_events USING KAFKA PROPERTIES ( 'bootstrap.servers' = 'kafka-broker:9092', 'subscribe' = 'app_events', 'startingOffsets' = 'latest' );


查询外部表

外部表创建后,可使用标准 SQL 进行查询,与查询本地表语法完全一致。

-- 查询 Delta 外部表 SELECT product, SUM(amount) as total_sales FROM delta_sales GROUP BY product; -- 查询 Kafka 外部表(实时消息) SELECT * FROM kafka_events LIMIT 10;

性能说明

  • 查询外部表时,Lakehouse 会直接从外部存储读取数据文件,网络延迟可能高于本地表。
  • 建议对外部表频繁查询的数据使用
    COPY INTO
    COPY INTO
    导入到本地表。

删除外部表

使用

DROP EXTERNAL TABLE
DROP EXTERNAL TABLE
删除外部表元数据。

-- 删除外部表 DROP EXTERNAL TABLE delta_sales;


清理测试数据

完成外部表验证后,建议清理元数据:

-- 删除外部表 DROP EXTERNAL TABLE IF EXISTS delta_sales; DROP EXTERNAL TABLE IF EXISTS hudi_users; DROP EXTERNAL TABLE IF EXISTS kafka_events;


注意事项

  1. 只读访问:外部表仅支持查询,不支持
    INSERT
    INSERT
    UPDATE
    UPDATE
    DELETE
    DELETE
    等写入操作。
  2. Schema 同步:外部表 Schema 由外部系统管理。如果外部表结构变更,需执行
    REFRESH
    REFRESH
    或重建外部表。
  3. 网络连通:查询外部表需确保 Lakehouse 与外部存储(OSS/S3/Kafka)之间的网络连通。
  4. 格式支持:目前支持 Delta Lake、Hudi、Kafka 等主流外部格式。Parquet/ORC 文件建议通过 Volume 直接查询或
    COPY INTO
    COPY INTO
    导入。
  5. 权限要求:创建外部表需要对底层 Volume 或 Kafka 具有读取权限。

相关文档

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