Hive表导入数据的几种方式

导入数据到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'

现有一个文件“a.txt”,内容如下所示:

1       Tommy
2       Alice
3       Jim

通过以下命令将“a.txt”文件直接复制到表对应的数据存放目录:

hadoop fs -put a.txt /user/hive/warehouse/user/

通过以下语句查询user表内容,可得如图1所示结果,证明数据导入操作成功。

SELECT * FROM user

图1
这里写图片描述

通过以下命令复制一份“a.txt”文件:

hadoop fs -cp /user/hive/warehouse/user/a.txt /user/hive/warehouse/user/b.txt

此时再次执行查询命令,可得如图2所示结果。

图2
Hive表导入数据的几种方式_第1张图片

二、使用LOAD DATA命令

HiveQL中提供LOAD DATA命令,用于导入数据到Hive表中。根据导入文件是在本地,还是在HDFS文件系统上,LOAD DATA命令,又可分为LOAD DATA LOCAL INPATHLOAD DATA INPATH
以上面提及到的表和文件为对象,进行举例说明。
首先执行hadoop fs -rm /user/hive/warehouse/user/*语句,清空user表数据存放目录下的所有数据。
接下来执行LOAD DATA命令导入数据。具体命令如下:

LOAD DATA LOCAL INPATH 'a.txt' INTO TABLE user

此时通过表数据查询命令,可以得到如图3所示的表内容。

图3
这里写图片描述
假定在HDFS文件系统目录“/user”下有一个“b.txt”文件,它的内容如下所示:

4       dsl

如果执行如下命令,可以发现表内容如图4所示。

LOAD DATA INPATH '/user/b.txt' INTO TABLE user

图4
Hive表导入数据的几种方式_第2张图片

三、使用INSERT INTO TABLE tablename SELECT ...语句

可以从其他表获取数据插入到当前表中,具体是使用INSERT INTO TABLE tablename SELECT ...语句。
首先使用如下命令创建一个新的Hive表userlog。

CREATE TABLE userlog(id INT,name STRING)

接着使用如下命令从以上提及到的user表中获取数据插入userlog表中。

INSERT INTO TABLE userlog SELECT id,name FROM user

最后userlog表内容如图5所示。

图5
Hive表导入数据的几种方式_第3张图片

四、使用CREATE TABLE tablename AS SELECT ...语句

可以在创建Hive表的同时从其他表获取数据进行填充。比如执行如下语句,表示创建了一个新的Hive表,同时从上述提及到的user表中获取数据进行了填充。

CREATE TABLE personlog AS SELECT id,name FROM user

此时,新的Hive表内容如图6所示。

图6
Hive表导入数据的几种方式_第4张图片

你可能感兴趣的:(Hive表导入数据的几种方式)