表 DDL 命令用于创建、修改、查询和删除工作空间中的普通表。


表的类型

Lakehouse 提供多种表类型,选型时参考以下对比:

表类型说明适用场景
普通表(Table)格式化的二维数据,手动 INSERT/UPDATE/DELETE原始数据存储、ODS 层
动态表(Dynamic Table)基于查询定义自动增量刷新的数据对象DWD/DWS/ADS 层、指标汇总
物化视图(Materialized View)预计算并存储查询结果的特殊视图预计算查询结果、查询改写
视图(View)虚拟表,不存储数据,查询时动态计算简化复杂查询、逻辑抽象
外部表(External Table)数据存储在外部系统,Lakehouse 仅管理元数据联邦查询、数据湖访问

存储格式

普通表默认使用 Parquet 格式存储,具备以下优势:

  • 列式存储:只读取查询涉及的列,减少 I/O
  • 高效压缩:相比行式存储节省 50%–80% 存储空间
  • 向量化执行:配合 Lakehouse 执行引擎,聚合和过滤性能更优

表的约束

NOT NULL

列定义时加

NOT NULL
NOT NULL
,写入时系统校验该列不能为空。

CREATE TABLE orders ( order_id BIGINT NOT NULL, amount DECIMAL(10, 2) NOT NULL, note STRING -- 允许为空 );

PRIMARY KEY

主键约束有两种行为模式,选择时需了解差异:

模式语法写入去重范围适用场景
ENABLE VALIDATE RELY
ENABLE VALIDATE RELY
(默认)
PRIMARY KEY (col)
PRIMARY KEY (col)
SQL 写入 + 实时写入都去重通用场景
DISABLE NOVALIDATE RELY
DISABLE NOVALIDATE RELY
PRIMARY KEY (col) DISABLE NOVALIDATE RELY
PRIMARY KEY (col) DISABLE NOVALIDATE RELY
仅实时写入去重,SQL 写入不检查仅通过 CDC 实时同步写入的表

-- 默认模式:SQL 写入和实时写入都进行主键去重 CREATE TABLE customers ( customer_id BIGINT PRIMARY KEY, name STRING, updated_at TIMESTAMP ); -- DISABLE NOVALIDATE RELY:仅实时写入去重,SQL 写入不检查主键唯一性 -- 适合只通过 CDC 实时同步写入、不走 INSERT SQL 的表 CREATE TABLE customers_cdc ( customer_id BIGINT, name STRING, updated_at TIMESTAMP, PRIMARY KEY (customer_id) DISABLE NOVALIDATE RELY );


本章内容

页面说明
CREATE TABLE创建普通表,支持分区、分桶、主键、自增列等选项
分区按时间或其他字段分区,加速分区裁剪
分桶按列值散列分桶,优化 JOIN 和聚合
主键定义主键约束,用于 CDC 实时去重写入
自增列自动生成唯一递增整数值的列
生成列基于其他列表达式自动计算的列
默认值插入时未指定列值时的默认值定义
CREATE...CLONE快速克隆表结构(和可选数据)为新表
ALTER TABLE修改表属性,如重命名、添加/修改列、设置生命周期
ALTER TABLE COLUMN添加、重命名、修改列类型或删除列
DROP TABLE删除表及其数据
RESTORE TABLE将表回滚到某个历史版本
UNDROP TABLE恢复已删除的表(在数据保留期内)
DESC TABLE查看表的列定义、类型和约束
DESC HISTORY TABLE查看表的历史版本列表
SHOW TABLES列出当前 Schema 下的所有表
SHOW COLUMNS列出表的所有列信息
SHOW CREATE TABLE查看建表语句
SHOW PARTITIONS列出分区表的所有分区
SHOW TABLES HISTORY列出已删除的表(可用于 UNDROP)
ANALYZE TABLE收集表的统计信息,帮助优化器生成更优执行计划
OPTIMIZE合并小文件,提升查询性能

常用操作

创建表

-- 基础建表 CREATE TABLE IF NOT EXISTS public.orders ( order_id BIGINT, customer_id BIGINT, amount DECIMAL(10, 2), status STRING, created_at TIMESTAMP ); -- 带分区(按天分区,推荐时序数据) CREATE TABLE IF NOT EXISTS public.events ( event_id BIGINT, event_type STRING, user_id BIGINT, created_at TIMESTAMP ) PARTITIONED BY (days(created_at)); -- 带主键(CDC 实时写入场景) CREATE TABLE IF NOT EXISTS public.customers ( customer_id BIGINT PRIMARY KEY, name STRING, email STRING, updated_at TIMESTAMP );

修改表

-- 添加列 ALTER TABLE public.orders ADD COLUMN discount DECIMAL(5, 2); -- 重命名表 ALTER TABLE public.orders RENAME TO public.orders_v2; -- 设置数据保留期(天) ALTER TABLE public.orders SET data_retention_days = 7;

查看表

-- 查看表结构 DESC TABLE public.orders; -- 查看建表语句 SHOW CREATE TABLE public.orders; -- 列出所有表 SHOW TABLES; -- 查看分区列表 SHOW PARTITIONS public.events;

删除与恢复

-- 删除表 DROP TABLE IF EXISTS public.temp_orders; -- 恢复已删除的表 UNDROP TABLE public.temp_orders; -- 将表回滚到历史版本 RESTORE TABLE public.orders TO TIMESTAMP AS OF '2024-01-15 00:00:00';


相关文档

文档说明
SQL 命令总览所有 SQL 命令分类导航
普通表(对象模型)表的存储格式、类型选择和最佳实践
COPY INTO(导入)从 Volume 或外部存储批量导入数据
Time Travel 使用指南历史数据查询和表回滚操作
联系我们
预约咨询
微信咨询
电话咨询