【计算引擎】Hive外部表的适用场景及原因

适用场景

在实际的生产环境中,建议在ods层使用外部表。
原因:

  1. 外部表不会加载数据到Hive的默认仓库(挂载数据),减少了数据的传输,同时还能和其他外部表共享数据。
  2. 使用外部表,Hive不会修改源数据,不用担心数据损坏或丢失。
  3. Hive在删除外部表时,删除的只是表结构,而不会删除数据。

区别:

1. 内部表

内部表创建时候,会在hdfs文件系统上面创建相应的路径文件夹,相关表的数据都会存在里面,如果是insert into 进去的数据,每一条都会对应一个小文件,可以把文件已load方式加载进去或者直接把文件放到hdfs文件系统对应的路径里面,前提是创建表的时候,制定好分隔符,然后执行select * from 表,就可以将文件里面的数据读到表中

删除内部表(MANAGED_TABLE)的时候,在 MySQL的元数据表TBLS里面对应的one表内容被删除,另外HDFS文件系统上面的该表的数据都会被删除

2. 外部表
  1. 外部表没有指定location版本创建时候,会在hdfs文件系统上面创建相应的路径文件夹,相关表的数据都会存在里面,如果是insert into 进去的数据,每一条都会对应一个小文件,可以把文件已load方式加载进去或者直接把文件放到hdfs文件系统对应的路径里面,前提是创建表的时候,制定好分隔符,然后执行select * from 表,就可以将文件里面的数据读到表中
    删除时候,对应的hdfs上面的表路径以及数据都不会删除,即使没指定location,自己创建路径的话,还是没有删除。但是在 MySQL的元数据表TBLS里面对应的表内容被删除。

  2. 创建时候,如果指定了location的话,该外部表对应的存储路径文件夹=location指定的文件夹位置,通过desc formatted tablename和insert into方式插入一条数据会多一个文件在location文件夹下,得到了验证。
    删除时候,对应的hdfs上面的表路径以及数据都不会删除,即使没指定location,自己创建路径的话,还是没有删除。但是在 MySQL的元数据表TBLS里面对应的表内容被删除。

3. 内部表和外部表和外部表-location三者异同点
  • 内部表和外部表的共同点:

指定好了分隔符的情况下,直接往他们相关的目录下不管是load文件,还是直接hdfs命令上传文件到这个路径,都可以被识别为表数据,而且都会在MySQL元数据TBLS表里面存储,删除表的时候对应的TBLS元数据都被删除。

另外在hdfs文件系统的a数据库文件夹下都有一个one的文件夹,如果a数据库下创建一个内部表one,或者创建一个外部表one指定location为one这个路径,或者创建外部表one不带location,他们三个读出来的数据一样。

  • 内部表和外部表不同点:

内部表会把hdfs表相关的文件文件夹全干掉,外部表就不会

  • 外部表指定location和没指定location异同点:

指定location的话该表的数据都存储在location下,没指定location的话,数据都存储在当前数据库文件夹下一个名字为该表名的文件夹下,删除表时候hdfs上面数据都不会被删除,但是MySQL的元数据库表TBLS数据都会被删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孟知之

如果能帮助到你们,可否点个赞?

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

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

打赏作者

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

抵扣说明:

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

余额充值