91.1 演示环境介绍
- CentOS版本:6.5
- CM和CDH版本为5.13.1
91.2 操作演示
- 表结构
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;
- 数据文件内容:
[root@ip-186-31-6-148 data]# more a.txt
1,test
2,fayson
3,zhangsan
[root@ip-186-31-6-148 data]#
- test_user表数据
Insert方式加载数据
- insert向Hive表中插入数据可以单条插入和多条插入
insert into my_table values(1,'fayson1'); #单条插入
insert into my_table values(2,'fayson2'),(3,'fayson3'); #多条插入
- 使用追加的方式从其他表查询相应数据并插入到Hive表中
- 使用追加的方式将test_user表中id大于3并且小于5的数据插入到my_table表中
INSERT INTO my_table
SELECT id,name from test_user WHERE id > 3 and id < 5;
- 使用覆盖的方式从test_user表查询相应数据并插入到Hive表中
- 使用覆盖的方式将test_user表中id大于3并且小于5的数据插入到my_table表中
INSERT OVERWRITE TABLE my_table
SELECT id,name from test_user WHERE id > 3 and id < 5;
- 多表插入,将test_user表中的数据分别插入到my_table和my_table1中
- 将test_user表中id大于4并且小于6的数据,分别插入到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;
Load本地数据文件
- 在命令行使用追加的方式Load本地数据文件到Hive表中
LOAD DATA LOCAL INPATH '/data/a.txt' INTO TABLE my_table;
- 使用覆盖的方式Load本地数据文件到Hive表中
LOAD DATA LOCAL INPATH '/data/a.txt' OVERWRITE INTO TABLE my_table;
Load HDFS数据文件
- 将文件put到HDFS的/data目录下
- 修改/data目录为hive用户
sudo -u hdfs hadoop fs -chown -R hive:hive /data
- 在命令行使用追加的方式Load HDFS数据文件到Hive表中
LOAD DATA INPATH '/data/a.txt' INTO TABLE my_table;
- 在命令行使用覆盖的方式Load HDFS数据文件到Hive表中
LOAD DATA INPATH '/data/a.txt' OVERWRITE INTO TABLE my_table;
总结
- Load本地数据文件时需要注意文件目录和数据文件的权限,/data目录拥有其它用户的执行权限(x),目录下的数据文件有读权限®,否则会抛如下异常:
“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表中,并且不会去除重复数据
大数据视频推荐:
CSDN
大数据语音推荐:
企业级大数据技术应用
大数据机器学习案例之推荐系统
自然语言处理
大数据基础
人工智能:深度学习入门到精通