Loading......

文章背景图

📘 Hive SQL 数据表操作笔记(CREATE / DROP / ALTER)

2025-11-23
7
-
- 分钟
|

本笔记专门整理 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 常用字段类型

类型

说明

STRING

文本

BIGINT

整数

DOUBLE / DECIMAL(x,y)

小数,其中 DECIMAL 支持高精度

STRING(时间)

Hive 中常用 STRING 存储日期时间

📌 文本需要 ' ' 引号包裹;数字不需要。


2. 分区表(Partitioned Table)

2.1 分区的作用

  • 加速查询(仅扫描必要分区)

  • 提高数据管理能力(每个分区对应 HDFS 目录)

  • 便于按天、按业务拆分数据

常用分区字段命名:ptdtds


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)谨慎配置

重要表不建议设置生命周期(默认永久保存)。

评论交流