Lakehouse 动态表开发入门指南
概述
动态表(Dynamic Table)是云器 Lakehouse 增量计算的核心载体。你只需声明式地定义查询逻辑,系统会自动感知上游数据变化并增量刷新结果,无需手动编写复杂的增量 ETL 逻辑。本指南按开发流程分类,帮助你快速掌握动态表的创建、刷新和监控方法。
涉及的 SQL 命令
命令 用途 适用场景 CREATE DYNAMIC TABLE ... AS SELECTCREATE DYNAMIC TABLE ... AS SELECT
创建动态表 声明式定义增量计算逻辑 REFRESH DYNAMIC TABLEREFRESH DYNAMIC TABLE
手动触发刷新 立即计算最新结果 SHOW DYNAMIC TABLE REFRESH HISTORYSHOW DYNAMIC TABLE REFRESH HISTORY
查看刷新历史 监控刷新状态 DESC DYNAMIC TABLEDESC DYNAMIC TABLE
查看动态表结构 查看定义和配置 DROP DYNAMIC TABLEDROP DYNAMIC TABLE
删除动态表 清理不再需要的动态表
前置准备
以下示例使用模拟的订单表
orders_dtorders_dt
和产品表
products_dtproducts_dt
:
-- 创建订单表
CREATE TABLE IF NOT EXISTS orders_dt (
order_id INT,
product_id INT,
quantity INT,
order_date DATE
);
-- 创建产品表
CREATE TABLE IF NOT EXISTS products_dt (
product_id INT,
product_name STRING,
category STRING
);
-- 插入测试数据
INSERT INTO products_dt VALUES
(1, 'iPhone 15', 'Phone'),
(2, 'MacBook Pro', 'Laptop'),
(3, 'AirPods', 'Audio');
INSERT INTO orders_dt VALUES
(1, 1, 2, '2024-06-01'),
(2, 2, 1, '2024-06-01'),
(3, 1, 1, '2024-06-02');
创建动态表
使用
CREATE DYNAMIC TABLECREATE DYNAMIC TABLE
声明式定义计算逻辑。系统会自动处理增量计算。
-- 创建按产品类别汇总的动态表
CREATE DYNAMIC TABLE dt_category_sales
REFRESH INTERVAL 10 MINUTE VCLUSTER default
AS
SELECT
p.category,
COUNT(*) as order_count,
SUM(o.quantity) as total_quantity
FROM orders_dt o
JOIN products_dt p ON o.product_id = p.product_id
GROUP BY p.category;
参数说明 :
⚠️ 注意 :创建后建议立即执行一次
REFRESHREFRESH
,重置刷新时间基准。
手动刷新
使用
REFRESH DYNAMIC TABLEREFRESH DYNAMIC TABLE
立即触发计算,无需等待定时刷新。
-- 手动触发刷新
REFRESH DYNAMIC TABLE dt_category_sales;
结果验证 :
SELECT * FROM dt_category_sales ORDER BY category;
category order_count total_quantity Laptop 1 1 Phone 2 3
💡 提示 :向源表插入新数据后,执行
REFRESHREFRESH
即可看到增量计算结果。
查看刷新历史
使用
SHOW DYNAMIC TABLE REFRESH HISTORYSHOW DYNAMIC TABLE REFRESH HISTORY
监控刷新状态,判断是增量还是全量刷新。
-- 查看最近 5 次刷新记录
SHOW DYNAMIC TABLE REFRESH HISTORY WHERE name = 'dt_category_sales' LIMIT 5;
关键字段说明 :
statestate
:刷新状态(SUCCEED / FAILED / RUNNING)
refresh_moderefresh_mode
:刷新模式(INCREMENTAL / FULL)
refresh_triggerrefresh_trigger
:触发方式(MANUAL / SYSTEM_SCHEDULED)
查看动态表结构
使用
DESC DYNAMIC TABLEDESC DYNAMIC TABLE
查看动态表的定义和配置。
-- 查看动态表结构
DESC DYNAMIC TABLE dt_category_sales;
返回信息 :
表结构(列名、类型)
刷新间隔
使用的 VCluster
底层 SQL 定义
增量计算验证
向源表插入新数据,验证动态表的增量刷新能力。
-- 插入新订单
INSERT INTO orders_dt VALUES (4, 3, 5, '2024-06-03');
-- 手动刷新
REFRESH DYNAMIC TABLE dt_category_sales;
-- 查看更新后的结果
SELECT * FROM dt_category_sales ORDER BY category;
结果说明 :
category order_count total_quantity Audio 1 5 Laptop 1 1 Phone 2 3
⚠️ 注意 :Audio 类别从 0 变为 1,说明增量计算正确捕获了新数据。
删除动态表
使用
DROP DYNAMIC TABLEDROP DYNAMIC TABLE
删除动态表。注意必须使用
DROP DYNAMIC TABLEDROP DYNAMIC TABLE
,不能使用
DROP TABLEDROP TABLE
。
-- 删除动态表
DROP DYNAMIC TABLE dt_category_sales;
💡 提示 :删除后的动态表在 Time Travel 保留期内可通过
UNDROP TABLEUNDROP TABLE
恢复。
清理测试数据
完成动态表验证后,建议清理测试表:
-- 删除测试表
DROP TABLE IF EXISTS orders_dt;
DROP TABLE IF EXISTS products_dt;
💡 提示 :Lakehouse 支持
UNDROP TABLEUNDROP TABLE
,误删后可在保留期内恢复。
注意事项
VCluster 选择 :使用 GENERALGENERAL
类型的 VCluster(如 defaultdefault
),不要使用 ANALYTICSANALYTICS
类型。
刷新频率 :频率越高 CRU 消耗越大。T+1 场景用 1 DAY1 DAY
,小时级用 1 HOUR1 HOUR
。
非确定性函数 :避免在 Dynamic Table 中使用 CURRENT_TIMESTAMP()CURRENT_TIMESTAMP()
、RAND()RAND()
等非确定性函数。
DROP 语法 :必须使用 DROP DYNAMIC TABLEDROP DYNAMIC TABLE
,使用 DROP TABLEDROP TABLE
会报错。
增量限制 :部分复杂查询(如外层 JOIN + 非等值条件)可能无法增量执行,系统会自动回退到全量。
相关文档