导入数据到Hive表中有4种方式:使用HDFS文件管理命令复制/移动文件到Hive表数据存放目录,使用LOAD DATA
命令,使用INSERT INTO TABLE tablename SELECT ...
语句和使用CREATE TABLE tablename AS SELECT ...
语句。
一、使用HDFS命令
根据《Hadoop:The Definitive Guide 4th Edition》Chapter 17 Hive——A部分可知,Hive表数据与HDFS文件是对应的,因此,可以使用HDFS文件管理命令将文件直接复制/移动到Hive表数据存放目录,从而达到将数据导入相应Hive表的目的。
使用如下命令,建立一个Hive表user:
CREATE TABLE user(id INT,name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
- 1
现有一个文件“a.txt”,内容如下所示:
1 Tommy
2 Alice
3 Jim
- 1
- 2
- 3
通过以下命令将“a.txt”文件直接复制到表对应的数据存放目录:
hadoop fs -put a.txt /user/hive/warehouse/user/
- 1
通过以下语句查询user表内容,可得如图1所示结果,证明数据导入操作成功。
SELECT * FROM user
- 1
图1
通过以下命令复制一份“a.txt”文件:
hadoop fs -cp /user/hive/warehouse/user/a.txt /user/hive/warehouse/user/b.txt
- 1
此时再次执行查询命令,可得如图2所示结果。
图2
二、使用LOAD DATA
命令
HiveQL中提供LOAD DATA
命令,用于导入数据到Hive表中。根据导入文件是在本地,还是在HDFS文件系统上,LOAD DATA
命令,又可分为LOAD DATA LOCAL INPATH
和LOAD DATA INPATH
。
以上面提及到的表和文件为对象,进行举例说明。
首先执行hadoop fs -rm /user/hive/warehouse/user/*
语句,清空user表数据存放目录下的所有数据。
接下来执行LOAD DATA
命令导入数据。具体命令如下:
LOAD DATA LOCAL INPATH 'a.txt' INTO TABLE user
- 1
此时通过表数据查询命令,可以得到如图3所示的表内容。
图3
假定在HDFS文件系统目录“/user”下有一个“b.txt”文件,它的内容如下所示:
4 dsl
- 1
如果执行如下命令,可以发现表内容如图4所示。
LOAD DATA INPATH '/user/b.txt' INTO TABLE user
- 1
图4
三、使用INSERT INTO TABLE tablename SELECT ...
语句
可以从其他表获取数据插入到当前表中,具体是使用INSERT INTO TABLE tablename SELECT ...
语句。
首先使用如下命令创建一个新的Hive表userlog。
CREATE TABLE userlog(id INT,name STRING)
- 1
接着使用如下命令从以上提及到的user表中获取数据插入userlog表中。
INSERT INTO TABLE userlog SELECT id,name FROM user
- 1
最后userlog表内容如图5所示。
图5
四、使用CREATE TABLE tablename AS SELECT ...
语句
可以在创建Hive表的同时从其他表获取数据进行填充。比如执行如下语句,表示创建了一个新的Hive表,同时从上述提及到的user表中获取数据进行了填充。
CREATE TABLE personlog AS SELECT id,name FROM user
- 1
此时,新的Hive表内容如图6所示。
图6
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/production/markdown_views-ea0013b516.css">
</div>