Hive:Load本地文件数据到数据库中

1.声明

当前内容主要用于本人学习和复习,当前内容主要为使用LOAD方式将本地的文件导入导数据库中

主要分为以下情况(struct、map、array):

  1. 创建表的时候指定分隔符

本人准备的数据:
在这里插入图片描述

1|admin|100,80,50|一等奖:2,二等奖:1|phone,watch
2|guest|60,50,90|一等奖:0,二等奖:1|switch,computer,mp3

2.创建表的时候指定分隔符

删除存在的表students

drop table if exists students;

重新创建表

CREATE TABLE students (
id INT,
name STRING,
scores STRUCT<english:INT,math:INT,chinese:INT>,
reward MAP<STRING,INT>,
goods ARRAY<STRING>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'  -- 指定每个字段的分隔符
COLLECTION ITEMS TERMINATED BY ',' -- 指定集合的分割符
MAP KEYS TERMINATED BY ':'  -- 指定map中的key和value的分隔符
LINES TERMINATED BY '\n' ;  -- 指定行的分割符

在这里插入图片描述

3.开始加载数据

首先上传一份数据到HDFS中

hadoop fs -put /home/hy/apache-hive-2.3.7-bin/students.txt /test/

在这里插入图片描述
开始上传

LOAD DATA LOCAL INPATH '/test/students.txt' INTO TABLE students;

在这里插入图片描述
发现当前的没有这个文件?难道不是从HDFS系统中加载?是从当前的本地文件中加载?

1.(加载Linux中的文件到Hive中的table中)修改后的加载:

LOAD DATA LOCAL INPATH '/home/hy/apache-hive-2.3.7-bin/students.txt' INTO TABLE students;

执行后的结果:
在这里插入图片描述

这说明当前LOAD加载的是本地Linux中的文件,不是HDFS上面的文件…

测试并查看数据:

select * from students;

在这里插入图片描述
成功了。。。(这个说明使用LOAD方式比直接的INSERT方式要好,前面的博文中使用INSERT方式添加数据结果,MAP类型的key和value都是STRING,出现了问题,这个LOAD不会有这个问题)

在这里插入图片描述
在这里插入图片描述

2.(加载HDFS的文件到Hive中的表中)

 TRUNCATE TABLE students;
 LOAD DATA INPATH '/test/students.txt' INTO TABLE students;

唯一的区别就是是否存在LOCAL,有LOCAL就表示Linux文件,没有就是HDFS文件

对此在ui界面发现一个问题:原本在HDFS中的/test/students.txt文件被移动到了当前的hive中的students表中了

在这里插入图片描述
第二个区别就是LOAD中使用LOCAL时本地的文件还是存在的,而HDFS中的文件是会移动的

3.测试OVERWRITE

LOAD DATA LOCAL INPATH '/home/hy/apache-hive-2.3.7-bin/students.txt' OVERWRITE INTO TABLE students;
LOAD DATA LOCAL INPATH '/home/hy/apache-hive-2.3.7-bin/students.txt' INTO TABLE students;

结果:

在这里插入图片描述
这说明使用OVERWRITE是重新内容,而不使用OVERWRITE就表示追加内容

4.总结

1.当前的分隔符操作只能在当前的创建表的时候指定,load的时候不能指定分隔符(以为有,结果没有,具体原因:百度结果)

2.LOAD数据会使用数据转换效果比当前的insert好,建议使用这种方式操作添加数据(如果是覆盖可以追加参数OVERWRITE)

3.使用LOCAL就表示从本地Linux中加载,而不使用LOCAL就表示从HDFS中加载,linux中的文件只会复制到Hive中,而HDFS中的文件会移动到Hive中

以上纯属个人见解,如有问题请联系本人!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值