加载数据
描述
LOAD DATA
语句将数据从用户指定的目录或文件加载到 Hive serde 表中。如果指定了目录,则加载该目录中的所有文件。如果指定了文件,则仅加载单个文件。此外,LOAD DATA
语句还接受可选的分区规范。当指定了分区时,数据文件(当输入源是目录时)或单个文件(当输入源是文件时)将被加载到目标表的分区中。
如果表已缓存,则该命令将清除该表及其所有依赖于该表的缓存数据。缓存将在下次访问该表或其依赖项时延迟填充。
语法
LOAD DATA [ LOCAL ] INPATH path [ OVERWRITE ] INTO TABLE table_identifier [ partition_spec ]
参数
-
路径
文件系统的路径。它可以是绝对路径,也可以是相对路径。
-
表标识符
指定表名,可以选择使用数据库名称进行限定。
语法:
[ 数据库名称. ] 表名
-
分区规范
一个可选参数,用于指定以逗号分隔的分区键值对列表。
语法:
PARTITION ( 分区列名 = 分区列值 [ , ... ] )
-
本地
如果指定,则会导致
INPATH
相对于本地文件系统解析,而不是默认文件系统(通常是分布式存储)。 -
覆盖
默认情况下,新数据会追加到表中。如果使用了
OVERWRITE
,则表将被新数据覆盖。
示例
-- Example without partition specification.
-- Assuming the students table has already been created and populated.
SELECT * FROM students;
+---------+----------------------+----------+
| name| address|student_id|
+---------+----------------------+----------+
|Amy Smith|123 Park Ave, San Jose| 111111|
+---------+----------------------+----------+
CREATE TABLE test_load (name VARCHAR(64), address VARCHAR(64), student_id INT) USING HIVE;
-- Assuming the students table is in '/user/hive/warehouse/'
LOAD DATA LOCAL INPATH '/user/hive/warehouse/students' OVERWRITE INTO TABLE test_load;
SELECT * FROM test_load;
+---------+----------------------+----------+
| name| address|student_id|
+---------+----------------------+----------+
|Amy Smith|123 Park Ave, San Jose| 111111|
+---------+----------------------+----------+
-- Example with partition specification.
CREATE TABLE test_partition (c1 INT, c2 INT, c3 INT) PARTITIONED BY (c2, c3);
INSERT INTO test_partition PARTITION (c2 = 2, c3 = 3) VALUES (1);
INSERT INTO test_partition PARTITION (c2 = 5, c3 = 6) VALUES (4);
INSERT INTO test_partition PARTITION (c2 = 8, c3 = 9) VALUES (7);
SELECT * FROM test_partition;
+---+---+---+
| c1| c2| c3|
+---+---+---+
| 1| 2| 3|
| 4| 5| 6|
| 7| 8| 9|
+---+---+---+
CREATE TABLE test_load_partition (c1 INT, c2 INT, c3 INT) USING HIVE PARTITIONED BY (c2, c3);
-- Assuming the test_partition table is in '/user/hive/warehouse/'
LOAD DATA LOCAL INPATH '/user/hive/warehouse/test_partition/c2=2/c3=3'
OVERWRITE INTO TABLE test_load_partition PARTITION (c2=2, c3=3);
SELECT * FROM test_load_partition;
+---+---+---+
| c1| c2| c3|
+---+---+---+
| 1| 2| 3|
+---+---+---+