如何向Hive表加载数据
Posted Hadoop实操
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何向Hive表加载数据相关的知识,希望对你有一定的参考价值。
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
Fayson的github:https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1.文档编写目的
向Hive表加载数据主要有以下几种方式:
1.通过Insert的方式加载数据
2.从本地文件系统导文件到Hive表
3.从HDFS加载数据到Hive表
4.单个查询语句中创建表并加载数据
本文主要是通过实操的方式来介绍Hive的这几种数据加载。
内容概述
1.Insert加载数据的方式
2.Load本地数据
3.Load HDFS数据
测试环境
1.CentOS6.5
2.CM和CDH版本为5.13.1
2.测试环境
1.测试表结构
CREATE TABLE my_table(
KEY int,
value string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
CREATE TABLE my_table1(
KEY int,
age int
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
(可左右滑动)
2.测试数据
数据目录
数据文件内容:
[root@ip-172-31-6-148 data]# more a.txt
1,test
2,fayson
3,zhangsan
[root@ip-172-31-6-148 data]#
(可向右拖动)
3.test_user表数据
3.Insert方式加载数据
1.通过insert向Hive表中插入数据可以单条插入和多条插入
insert into my_table values(1,'fayson1'); #单条插入
insert into my_table values(2,'fayson2'),(3,'fayson3'); #多条插入
(可向右拖动)
2.使用追加的方式从其他表查询相应数据并插入到Hive表中
INSERT INTO my_table
SELECT id,name from test_user WHERE id > 3 and id < 5;
(可向右拖动)
使用追加的方式将test_user表中id大于3并且小于5的数据插入到my_table表中,执行结果如下:
3.使用覆盖的方式从test_user表查询相应数据并插入到Hive表中
INSERT OVERWRITE TABLE my_table
SELECT id,name from test_user WHERE id > 3 and id < 5;
(可向右拖动)
使用覆盖的方式将test_user表中id大于3并且小于5的数据插入到my_table表中,执行结果如下:
4.多表插入,将test_user表中的数据分别插入到my_table和my_table1中
FROM test_user
INSERT INTO my_table select id, name where id > 4 and id < 6
INSERT INTO my_table1 select id, age
where id > 4 and id < 6;
(可向右拖动)
将test_user表中id大于4并且小于6的数据,分别插入到my_table和my_table1中,执行结果如下:
4.Load本地数据文件
1.在命令行使用追加的方式Load本地数据文件到Hive表中
LOAD DATA LOCAL INPATH '/data/a.txt' INTO TABLE my_table;
(可向右拖动)
执行结果如下:
2.使用覆盖的方式Load本地数据文件到Hive表中
LOAD DATA LOCAL INPATH '/data/a.txt' OVERWRITE INTO TABLE my_table;
(可向右拖动)
执行结果如下:
5.Load HDFS数据文件
1.将文件put到HDFS的/data目录下
修改/data目录为hive用户
sudo -u hdfs hadoop fs -chown -R hive:hive /data
(可向右拖动)
2.在命令行使用追加的方式Load HDFS数据文件到Hive表中
LOAD DATA INPATH '/data/a.txt' INTO TABLE my_table;
(可向右拖动)
执行结果如下:
3.在命令行使用覆盖的方式Load HDFS数据文件到Hive表中
LOAD DATA INPATH '/data/a.txt' OVERWRITE INTO TABLE my_table;
(可向右拖动)
执行结果:
6.总结
Load本地数据文件时需要注意文件目录和数据文件的权限,/data目录拥有其它用户的执行权限(x),目录下的数据文件有读权限(r),否则会抛如下异常:
“Invalid path ''/data/a.txt'': No files matching path file:/data/a.txt (state=42000,code=40000)”
(可向右拖动)
Load HDFS数据文件时需要登录Hive的用户是否有访问该文件的权限
Load本地文件时是将数据拷贝至对应表的数据目录下,且文件名不变。
Load HDFS文件到Hive表时,文件会被Move到对应表的数据目录下,且保持文件名。
使用Load命令时如果没有OVERWRITE,会直接APPEND到Hive表中,并且不会去除重复数据。
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
以上是关于如何向Hive表加载数据的主要内容,如果未能解决你的问题,请参考以下文章
如何将前 2 个 hive 表中的数据加载到下面的第三个表中?