Hive的CREATE语句用于创建内部表、分区表和外部表。内部表由Hive管理数据;分区表按列值拆分数据以优化查询;外部表引用外部数据,删除时不删除底层数据。创建时需指定分隔符、文件格式及分区字段或路径。
Hive创建表实现方法
作者:技术拾光
时间:2026-06-23
浏览:228
文章目录
Hive中的CREATE语句是数据定义的核心工具,用于创建表、分区表、外部表等各类表结构。下面先快速回顾它的几种常见用法——这些语法虽然基础,但在实际工作中容易混淆。

创建普通表
先从最基础的开始:创建普通表,即内部表。这种表由Hive管理数据文件的存储和生命周期。
CREATE TABLE table_name (
column1 data_type,
column2 data_type,
...
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY 'delimiter'
STORED AS file_format;
举个例子,创建一个员工信息表,字段之间用逗号分隔:
CREATE TABLE employees (
id INT,
name STRING,
age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
这里FIELDS TERMINATED BY ','指定了字段分隔符,STORED AS TEXTFILE表示数据以纯文本形式存储。实际使用时,分隔符和文件格式需根据源数据确定。
创建分区表
数据量大时,分区表几乎是必选项。它按指定列的值将数据拆分成不同目录,查询时能显著缩小扫描范围。
CREATE TABLE table_name (
column1 data_type,
column2 data_type,
...
)
PARTITIONED BY (partition_column1 data_type, partition_column2 data_type, ...)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY 'delimiter'
STORED AS file_format;
假设有一个销售数据表,需要按订单日期分区:
CREATE TABLE sales (
order_id INT,
product_id INT,
customer_id INT,
quantity INT,
price FLOAT
)
PARTITIONED BY (order_date STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
有了分区,查询某一天的数据不再需要全表扫描。注意PARTITIONED BY的列不会出现在表字段列表中,它们属于分区字段。
创建外部表
外部表和内部表最大的区别在于:外部表的数据文件存在于Hive之外(比如HDFS的某个路径),删除表时不会删除底层数据。这在数据共享或保留原始数据的场景下非常实用。
CREATE EXTERNAL TABLE table_name (
column1 data_type,
column2 data_type,
...
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY 'delimiter'
STORED AS file_format
LOCATION 'hdfs_path';
下面是一个客户数据的外部表示例:
CREATE EXTERNAL TABLE customer_data (
id INT,
name STRING,
age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION 'hdfs://localhost:9000/user/customer_data';
注意LOCATION指向一个已经存在(或将要存放)数据的HDFS目录。外部表创建时不会移动数据,它只是让Hive知道去哪里读取。
在实际项目中,创建表时还需考虑元数据存储(通常是MySQL或Derby)的可用性,以及HDFS的配置是否正常。另外,ROW FORMAT、FIELDS TERMINATED、STORED AS这些参数都要根据源数据的具体格式来调整,没有统一的标准模板。
实用工具推荐
电子包浆
使用 ›绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
图片压缩
使用 ›选择画质和输出格式,预览压缩前后的大小。
相关文章