Hive内部表和外部表的区别

hive作为基于hdfs的数据仓库,在构建表的时候,会有内部表和外部表,这里介绍两者的异同点。

相同点:
              1、他们都是用mysql或者derby作为元数据存储,他们在元数据的组织上是相同的,他们都是用hdfs做实际的数据存储,本身没有

数据存储的功能,需要借助HDFS。

              2、他们都可以在建表的时候指定一个指向HDFS文件夹的路径,如果不指定这个路径,那么默认的hive表中的数据会保存在HDFS上

一个叫做"/user/hive/warehouse"上一个和表名称一样的文件夹中,例如student表则对应路径是/user/hive/warehouse/student。

"/user/hive/warehouse"是一个默认的路径,可以通过hive-site.xml文件来配置。

              3、他们创建成功之后,通过load data inpath '/path/to/xxx' overwrite into table tb_name的方式导入hdfs上的数据到hive数据表

中时,被导的数据会被删除,在hdfs中,相当于移动文件。

              4、在测试的过程中发现,内部表也可以指定hdfs上已经存在的一个目录,这样表一创建就有了数据,这样和外部表表现差不多,只是

在删除表的时候会有差异。


图(1)

            如图所示,在hdfs上/usr/feiy目录下本来有student.txt文件和tbls文件夹,我们成功创建了一个不带location指向的外部表,该表的

数据最终显示是在/user/hive/warehouse/stuex目录下,这验证了第二点。

            我们向stuex表中导入hdfs上/usr/feiy/student.txt的数据之后,发现/usr/feiy/student.txt文件不见了,验证了第三点。

            接下来我们验证内部表的创建过程:

	            
图(2)

           内部表创建也可以指定一个location,这样验证了第二点,最后通过load data inpath导入数据之后,原来的hdfs上的文件就被删除了。验证了第三点。           

异同点:

            1、创建表的语句上外部表会有一个external的关键字。

            2、删除表的时候,内部表不仅会删除元数据,还会会将hdfs上对应的目录删除掉,而外部表只是删除了元数据,并不会删除hdfs上的数

据。可以理解为外部表只是建立了一个元数据到hdfs的一个链接,最后删除表的时候,只是将这个链接断开了,而不是连同hdfs文件一起删除。

外部表删除过程:

	
图(3)

            外部表删除之后,他的默认存储数据的目录和文件还存在。

            内部表删除过程:


图(4)

             图(1)中我们通过指定location的方式创建了内部表student,在这里图(4)中我删除表之后,对应在hdfs上的文件夹也删除了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值