问题导读:
1、Hive五种数据导入方式有哪些?
2、导入表命令中有无LOCAL关键字的区别?
3、使用OVERWRITE或INTO关键字的作用及区别?
4、INPATH路径的限制?
5、什么是动态分区插入?
6、动态分区插入需要做哪些设置?
内容:
既然Hive没有行级别的数据插入、更新和删除操作,那么往表中装载数据的唯一途径就是使用一种”大量“的数据装载操作。我们以如下格式文件演示五种数据导入Hive方式
Tom 24 NanJing Nanjing University
Jack 29 NanJing Southeast China University
Mary Kake 21 SuZhou Suzhou University
John Doe 24 YangZhou YangZhou University
Bill King 23 XuZhou Xuzhou Normal University
数据格式以\t分隔,分别表示:姓名、年龄、地址、学校
一、从本地文件系统中导入数据
(1) 创建test1测试表
hive> CREATE TABLE test1(name STRING,age INT, address STRING,school STRING)
> ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
> STORED AS TEXTFILE ;
OK
Time taken: 0.078 seconds
(2) 从本地加载数据
hive> LOAD DATA LOCAL INPATH "/home/hadoopUser/data/test1.txt"
> INTO TABLE test1;
Copying data from file:/home/hadoopUser/data/test1.txt
Copying file: file:/home/hadoopUser/data/test1.txt
Loading data to table hive.test1
Table hive.test1 stats: [numFiles=1, numRows=0, totalSize=201, rawDataSize=0]
OK
Time taken: 0.364 seconds
(3) 查看导入结果
hive> select * from test1;
OK
Tom 24 NanJing Nanjing University
Jack 29 NanJing Southeast China University
Mary Kake 21 SuZhou Suzhou University
John Doe 24 YangZhou YangZhou University
Bill King 23 XuZhou Xuzhou Normal University
Time taken: 0.533 seconds, Fetched: 5 row(s)
注意:
此处使用的是LOCAL,表示从本地文件系统中加载数据到Hive中,同时没有OVERWRITE关键字,仅仅会把新增的文件增加到目标文件夹而不会删除之前的数据。如果使用OVERWRITE关键字,那么目标文件夹中之前的数据将会被先删除掉。
二、从HDFS文件系统加载数据到Hive
(1) 清空之前创建的表中数据
insert overwrite table test1 select * from test1 where 1=0; //清空表,一般不推荐这样操作
(2) 从HDFS加载数据
hive> LOAD DATA INPATH "/input/test1.txt"
> OVERWRITE INTO TABLE test1;
Loading data to table hive.test1
rmr: DEPRECATED: Please