关于《Hive的数据导出》请参见
《HIVE几种数据导出方式》
好久没写Hive的那些事了,今天开始写点吧。今天的话题是总结Hive的几种常见的数据导入方式,我总结为四种:
(1)、从本地文件系统中导入数据到Hive表;
(2)、从HDFS上导入数据到Hive表;
(3)、从别的表中查询出相应的数据并导入到Hive表中;
(4)、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。
我会对每一种数据的导入进行实际的操作,因为纯粹的文字让人看起来很枯燥,而且学起来也很抽象。好了,开始操作!
一、从本地文件系统中导入数据到Hive表
先在Hive里面创建好表,如下:
2 |
> (id int , name string, |
5 |
> FIELDS TERMINATED BY '\t' |
8 |
Time taken: 2.832 seconds |
这个表很简单,只有四个字段,具体含义我就不解释了。本地文件系统里面有个/home/wyp/wyp.txt文件,内容如下:
1 |
[wyp @master ~]$ cat wyp.txt |
2 |
1 wyp 25 13188888888888 |
3 |
2 test 30 13888888888888 |
wyp.txt文件中的数据列之间是使用\t分割的,可以通过下面的语句将这个文件里面的数据导入到wyp表里面,操作如下:
1 |
hive> load data local inpath 'wyp.txt' into table wyp; |
2 |
Copying data from file:/home/wyp/wyp.txt |
3 |
Copying file: file:/home/wyp/wyp.txt |
4 |
Loading data to table default .wyp |
5 |
Table default .wyp stats: |
6 |
[num_partitions: 0 , num_files: 1 , num_rows: 0 , total_size: 67 ] |
8 |
Time taken: 5.967 seconds |
这样就将wyp.txt里面的内容导入到wyp表里面去了(关于这里面的执行过程大家可以参见本博客的《Hive表与外部表》),可以到wyp表的数据目录下查看,如下命令:
1 |
hive> dfs -ls /user/hive/warehouse/wyp ; |
3 |
-rw-r--r-- 3 wyp supergroup 67 2014 - 02 - 19 18 : 23 /hive/warehouse/wyp/wyp.txt |
数据的确导入到wyp表里面去了。
和我们熟悉的关系型数据库不一样,Hive现在还不支持在insert语句里面直接给出一组记录的文字形式,也就是说,Hive并不支持INSERT INTO .... VALUES形式的语句。
二、HDFS上导入数据到Hive表
从本地文件系统中将数据导入到Hive表的过程中,其实是先将数据临时复制到HDFS的一个目录下(典型的情况是复制到上传用户的HDFS home目录下,比如/home/wyp/),然后再将数据从那个临时目录下移动(注意,这里说的是移动,不是复制!)到对应的Hive表的数据目录里面。既然如此,那么Hive肯定支持将数据直接从HDFS上的一个目录移动到相应Hive表的数据目录下,假设有下面这个文件/home/wyp/add.txt,具体的操作如下:
1 |
[wyp @master /home/q/hadoop- 2.2 . 0 ]$ bin/hadoop fs -cat /home/wyp/add.txt |