本文基于 Hive 官方 DML 文档整理,涵盖数据加载、插入、写入文件系统以及导入导出等常用操作。 官方文档:Apache Hive : LanguageManual DML
一、Hive 数据操作语言
1. 将文件加载到表中(常用)
语法:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] [INPUTFORMAT 'inputformat' SERDE 'serde'] (3.0 or later)
说明:
-
LOCAL:从本地文件系统加载数据。 -
不带
LOCAL:从 HDFS 加载数据,类似于mv操作。 -
OVERWRITE:覆盖表中已有数据。 -
INTO TABLE:指定目标表。 -
PARTITION:可选,指定分区。 案例:-- 创建表
CREATE TABLE IF NOT EXISTS bigdata.students1(
id STRING COMMENT '学号',
name STRING COMMENT '姓名',
age INT COMMENT '年龄',
sex STRING COMMENT '性别',
clazz STRING COMMENT '班级'
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
CREATE TABLE IF NOT EXISTS bigdata.students2 LIKE students1;
-- 加载本地数据到 Hive 表中
LOAD DATA LOCAL INPATH '/root/sh_code/student.csv' OVERWRITE INTO TABLE students1;
-- 加载 HDFS 上的数据到 Hive 表,类似于 mv
LOAD DATA INPATH '/student.csv' OVERWRITE INTO TABLE students2;
2. 将查询数据插入 Hive 表
语法:
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;
说明:
-
INSERT OVERWRITE:覆盖目标表中已有数据。 -
INSERT INTO:向目标表中追加数据。 案例:INSERT INTO TABLE students5 SELECT * FROM students1;
INSERT OVERWRITE TABLE students5 SELECT * FROM students1;
3. 通过 SQL 将值插入到表中
语法:
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
案例:
INSERT INTO TABLE students5 VALUES('100001','张三',25,'1','文科一班');
4. 根据查询结果将数据写入文件系统
语法:
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
[ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)
SELECT ... FROM ...
Hive extension (multiple inserts):
FROM from_statement
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1
[INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2] ...
row_format 语法:
row_format
: DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
[NULL DEFINED AS char] (Note: Only available starting with Hive 0.13)
案例:
INSERT OVERWRITE LOCAL DIRECTORY '/root/students5'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
SELECT * FROM students5;
5. 导入导出
(1)导出语法
EXPORT TABLE tablename [PARTITION (part_column="value"[, ...])]
TO 'export_target_path' [ FOR replication('eventid') ]
案例:
EXPORT TABLE students5 TO '/students5';
(2)导入语法
IMPORT [[EXTERNAL] TABLE new_or_original_tablename [PARTITION (part_column="value"[, ...])]]
FROM 'source_path'
[LOCATION 'import_target_path']
案例:
-- 清空表
TRUNCATE TABLE students1;
-- 导入数据
IMPORT TABLE students1 FROM '/students5';
二、总结
本文整理了 Hive DML 中常用的数据操作,包括:
- 使用
LOAD DATA从本地或 HDFS 加载数据到表中; - 使用
INSERT INTO/INSERT OVERWRITE插入查询结果; - 使用
INSERT INTO ... VALUES直接插入值; - 使用
INSERT OVERWRITE DIRECTORY将查询结果写入文件系统; - 使用
EXPORT/IMPORT进行表级数据的导出与迁移。 掌握这些 DML 语句后,就可以在 Hive 中灵活地完成数据的加载、插入、导出和迁移。