本笔记专门整理 Hive SQL 中的数据表管理操作,包括:
数据表创建、分区、生命周期、临时表、视图、删除、修改等常用 DDL。
1. CREATE —— 创建数据表
1.1 创建数据表基础示例
CREATE TABLE IF NOT EXISTS atest.table_test (
id BIGINT COMMENT '自增id',
create_time STRING COMMENT '创建时间',
modify_time STRING COMMENT '修改时间'
)
COMMENT '测试表';
说明:
-
IF NOT EXISTS:避免重复创建时报错 -
字段包含:字段名、类型、注释
-
Hive 表为二维结构(行 = 数据,列 = 字段)
1.2 常用字段类型
📌 文本需要 ' ' 引号包裹;数字不需要。
2. 分区表(Partitioned Table)
2.1 分区的作用
-
加速查询(仅扫描必要分区)
-
提高数据管理能力(每个分区对应 HDFS 目录)
-
便于按天、按业务拆分数据
常用分区字段命名:pt、dt、ds
2.2 单分区建表
CREATE TABLE IF NOT EXISTS atest.table_test_2 (
id BIGINT COMMENT '自增id',
create_time STRING COMMENT '创建时间',
modify_time STRING COMMENT '修改时间'
)
COMMENT '测试表'
PARTITIONED BY (pt STRING COMMENT '业务日期');
2.3 多级分区建表
CREATE TABLE IF NOT EXISTS atest.table_test_3 (
id BIGINT COMMENT '自增id',
create_time STRING COMMENT '创建时间',
modify_time STRING COMMENT '修改时间'
)
COMMENT '测试表'
PARTITIONED BY (
pt STRING COMMENT '业务日期',
code_id STRING COMMENT '测试id'
);
3. 数据表生命周期(Lifecycle)
Hive 的生命周期通过 TBLPROPERTIES 设置:
CREATE TABLE IF NOT EXISTS atest.table_test_2 (
id BIGINT COMMENT '自增id',
create_time STRING COMMENT '创建时间',
modify_time STRING COMMENT '修改时间'
)
COMMENT '测试表'
PARTITIONED BY (pt STRING COMMENT '业务日期')
TBLPROPERTIES (
'PARTITION_LIFECYCLE'='365', -- 分区保留365天
'LIFECYCLE'='730' -- 表保留730天
);
注意事项:
-
临时表的生命周期可设为很短,例如 7 天
-
若为长期使用的重要表,不要设置
LIFECYCLE -
分区生命周期一般必须设置,避免占满存储
4. 临时数据表(CTAS)
CTAS = Create Table As Select,用于将查询结果直接生成一张表:
CREATE TABLE IF NOT EXISTS atest.table_test4 AS
SELECT *
FROM source_table
WHERE pt = '2025-01-02';
特点:
-
一般无分区
-
常用于临时存储、中间结果
-
一次性使用为主
5. 数据视图(View)
视图 = 仅存储查询逻辑的虚拟表(无数据的物理存储)
CREATE VIEW IF NOT EXISTS atest.table_test5 AS
SELECT a
FROM atest.table_test4;
用途:
-
封装复杂 SQL
-
多表 join 逻辑复用
-
数据权限管理(暴露部分字段)
6. DROP —— 删除操作(慎用)
6.1 删除整张表
DROP TABLE atest.table_test_3;
6.2 删除分区
ALTER TABLE atest.test2 DROP IF EXISTS PARTITION (pt='2025-01-01');
ALTER TABLE atest.test2 DROP IF EXISTS
PARTITION (pt='2025-01-01'),
PARTITION (pt='2025-01-02');
7. ALTER —— 修改表结构(元数据)
7.1 修改表名 / 修改表注释
ALTER TABLE atest.table_test_2 RENAME TO atest.table_test2;
ALTER TABLE atest.table_test_2 SET TBLPROPERTIES ('comment'='新注释');
7.2 修改字段名 / 字段类型 / 字段注释
ALTER TABLE atest.table_test_2 CHANGE COLUMN
id id2 STRING COMMENT 'id2';
说明:
-
一条语句可同时修改名称、类型、注释
-
旧数据文件不变,新 schema 在读取时生效(Schema on Read)
7.3 新增字段
ALTER TABLE atest.table_test2 ADD COLUMNS (
id3 STRING COMMENT 'id3',
id4 STRING COMMENT 'id4'
);
说明:
-
新字段自动追加到表末尾
-
旧分区旧数据对应新字段值自动为 NULL
7.4 修改生命周期
ALTER TABLE atest.table_test2
SET TBLPROPERTIES ('PARTITION_LIFECYCLE'='365', 'LIFECYCLE'='730');
📚 最佳实践建议
✔ 字段命名规范(强烈推荐)
-
小写
-
下划线隔词(snake_case)
-
示例:
user_id,create_time,order_amount
✔ 分区字段统一使用 pt
提升查询模板统一性。
✔ 所有字段必须写注释(comment)
方便数据治理与血缘分析。
✔ 表生命周期(LIFECYCLE)谨慎配置
重要表不建议设置生命周期(默认永久保存)。