hive内部表与外部表

知识梳理:

创建表的时候没有external的是内部表,有external的是内部表

内部表删除会删除元数据以及存储数据,外部表仅删除元数据

内部表默认位置/user/hive/warehouse,外部表位置自己设定

 

内部表:

1.进入hive,查看存在的数据库,使用其中的一个数据库,在其中显示已经存在的表,然后创建一个新表(表名word)

2.在本地创建一个文件,内容如下:(红框中是tab键所得)

3.往数据库word表中插入信息

方法一:格式:insert into [表名] values('字段一','字段二'.....)   【提示:这里的字段要和上边创建时候的字段对应】

命令:insert into word values('hello',1);   

【不建议使用此方法,原因每次向表中插入数据都会调用mapreduce,而且过程相对较慢】

3.1.1.在hive下查看数据信息,如下表示查看插入成功:

3.1.2.在hdfs下查看数据信息,会在默认位置下,看到多处两个信息,一个是创建的表,一个是插入的信息

3.1.3.查看插入的信息,如下:

3.1.4.查看mysql数据库中的信息如下:(多出一个新创建的表,类型是内部表)

进入mysql --> show databases; --->use 数据库名;(安装hive的时候创建的数据库名) --->select * from TBLS;

3.1.5.删除hdfs中上传的信息(3.1.2中查看的插入的文件的路径)

3.1.6.查看hive下的word表中的信息,为空

3.1.7.删除word表

3.1.8.查看MySQL数据库中,以及hdfs下有关表的信息都被清空

 

方法二:使用load方法加载数据

3.2 本地文件hive_test_tab的内容如下:

3.2.1 格式:load data [local] inpath '本地路径' into table 表名;    [如果文件在本地,需要加 local ]

命令:load data local inpath '/home/hadoop/hive_test_tab' into table word;

【用这种方法会出现下面所示,现实的内容会有NULL】

3.2.2  余下操作和方法一中的一样(3.1.2 -- 3.1.8)

【解决方法】如果想要得到和输入的内容一样的格式(就是输出没有NULL),可采用如下的方法创建表:

row,fields这两行是对需要加载的文件的分隔符的设置,本文需要加载的文件hive_test_tab,内容中间使用的是制表符分割,所以这里使用\t

3.2.3 然后再使用load方法将数据上传到表中

命令:load data local inpath '/home/hadoop/hive_test_tab' into table word;

在查看表的信息,就没有NULL,如下:

3.2.4 余下操作和方法一中的一样(3.1.2 -- 3.1.8)

 

方法三:使用hdfs命令

格式:hdfs dfs -put   本地文件名   hdfs下创建的表的路径

3.3.1 创建表

3.3.2 查看hdfs下表的位置

其中hive_test_tab是在本地创建的一个文件,上边也有(方法二中的3.2)

3.3.3 查看hive下的表中的信息,如下:

【如果不想要里面的NULL,可以在创建表的时候使用格式,如3.2.2 中的解决方法】

3.3.4  余下操作和方法一中的一样(3.1.2 -- 3.1.8)

 

外部表:

在hive中创建外部表,创建方式和内部表相似,但是多了一个external(外部表的象征),后面多一个location,

其中的“/database/” 为上传的文件在hdfs下的目录名

(该文章的文件在hdfs下的位置是/database/hive_test_tab,所以是"/database/")

【提示:如果创建表的时候没有中间row,fields那两行在结果查询中也会出现NULL,上边有提到】

如果想要去hdfs下查看数据是否成功传入,但是不知道位置,可以使用一下命令查看位置,还能查看表的有关信息

删除外部表

此时在hive下,还有mysql中都没有外部表的信息,但是hdfs下查看仍然有外部表存在,查看文件内容,仍然显示信息

(原因:删除外部表只删除元数据,不删除存储数据,这也是内部表与外部表的不同之一)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值