Lakehouse 动态表开发入门指南

概述

动态表(Dynamic Table)是云器 Lakehouse 增量计算的核心载体。你只需声明式地定义查询逻辑,系统会自动感知上游数据变化并增量刷新结果,无需手动编写复杂的增量 ETL 逻辑。本指南按开发流程分类,帮助你快速掌握动态表的创建、刷新和监控方法。

涉及的 SQL 命令

命令用途适用场景
CREATE DYNAMIC TABLE ... AS SELECT
CREATE DYNAMIC TABLE ... AS SELECT
创建动态表声明式定义增量计算逻辑
REFRESH DYNAMIC TABLE
REFRESH DYNAMIC TABLE
手动触发刷新立即计算最新结果
SHOW DYNAMIC TABLE REFRESH HISTORY
SHOW DYNAMIC TABLE REFRESH HISTORY
查看刷新历史监控刷新状态
DESC DYNAMIC TABLE
DESC DYNAMIC TABLE
查看动态表结构查看定义和配置
DROP DYNAMIC TABLE
DROP DYNAMIC TABLE
删除动态表清理不再需要的动态表

前置准备

以下示例使用模拟的订单表

orders_dt
orders_dt
和产品表
products_dt
products_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 TABLE
CREATE 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;

参数说明

  • REFRESH INTERVAL 10 MINUTE
    REFRESH INTERVAL 10 MINUTE
    :每 10 分钟自动刷新一次。
  • VCLUSTER default
    VCLUSTER default
    :指定用于刷新的计算集群。

手动刷新

使用

REFRESH DYNAMIC TABLE
REFRESH DYNAMIC TABLE
立即触发计算,无需等待定时刷新。

-- 手动触发刷新 REFRESH DYNAMIC TABLE dt_category_sales;

结果验证

SELECT * FROM dt_category_sales ORDER BY category;

categoryorder_counttotal_quantity
Laptop11
Phone23

查看刷新历史

使用

SHOW DYNAMIC TABLE REFRESH HISTORY
SHOW DYNAMIC TABLE REFRESH HISTORY
监控刷新状态,判断是增量还是全量刷新。

-- 查看最近 5 次刷新记录 SHOW DYNAMIC TABLE REFRESH HISTORY WHERE name = 'dt_category_sales' LIMIT 5;

关键字段说明

  • state
    state
    :刷新状态(SUCCEED / FAILED / RUNNING)
  • refresh_mode
    refresh_mode
    :刷新模式(INCREMENTAL / FULL)
  • refresh_trigger
    refresh_trigger
    :触发方式(MANUAL / SYSTEM_SCHEDULED)

查看动态表结构

使用

DESC DYNAMIC TABLE
DESC 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;

结果说明

categoryorder_counttotal_quantity
Audio15
Laptop11
Phone23

删除动态表

使用

DROP DYNAMIC TABLE
DROP DYNAMIC TABLE
删除动态表。注意必须使用
DROP DYNAMIC TABLE
DROP DYNAMIC TABLE
,不能使用
DROP TABLE
DROP TABLE

-- 删除动态表 DROP DYNAMIC TABLE dt_category_sales;


清理测试数据

完成动态表验证后,建议清理测试表:

-- 删除测试表 DROP TABLE IF EXISTS orders_dt; DROP TABLE IF EXISTS products_dt;


注意事项

  1. VCluster 选择:使用
    GENERAL
    GENERAL
    类型的 VCluster(如
    default
    default
    ),不要使用
    ANALYTICS
    ANALYTICS
    类型。
  2. 刷新频率:频率越高 CRU 消耗越大。T+1 场景用
    1 DAY
    1 DAY
    ,小时级用
    1 HOUR
    1 HOUR
  3. 非确定性函数:避免在 Dynamic Table 中使用
    CURRENT_TIMESTAMP()
    CURRENT_TIMESTAMP()
    RAND()
    RAND()
    等非确定性函数。
  4. DROP 语法:必须使用
    DROP DYNAMIC TABLE
    DROP DYNAMIC TABLE
    ,使用
    DROP TABLE
    DROP TABLE
    会报错。
  5. 增量限制:部分复杂查询(如外层 JOIN + 非等值条件)可能无法增量执行,系统会自动回退到全量。

相关文档

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