[hive] 关于内部表和外部表区别的误区

本文详细阐述了在数据仓库中创建内部表与外部表的区别,包括数据移动、元数据及数据删除行为。内部表在创建时可能移动数据,并在删除时一并移除元数据与数据;外部表仅记录数据路径,删除时仅移除元数据,保留数据灵活性与安全性。

网上相当一部分博客如此描述内外部表的区别

创建表时:创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。
删除表时:在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

创建表时数据会不会移动取决于以下两点

1 数据来源是本地还是hdfs
若是本地一定不会移动(相当于copy),若是hdfs的文件则可能会移动(相当于剪切)

2 有没有指定location
内部表可以指定location,外部表也可以不指定location.外部表数据位置之所以没有变得是因为由location指向了数据原本存放的位置,如果对内部表做同样的设置,效果也是相同的.
当没有指定location时,不管内部表还是外部表都会在默认位置创建表目录.

因为创建外部表时往往会主动将外部表的location定位至数据所在位置,所以有"创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变"的表象产生.

删除表时有一点可以补充,truncate关键字只能删除内部表中的数据,而不能删除外部表中的数据.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值