网上相当一部分博客如此描述内外部表的区别
创建表时:创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。
删除表时:在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
创建表时数据会不会移动取决于以下两点
1 数据来源是本地还是hdfs
若是本地一定不会移动(相当于copy),若是hdfs的文件则可能会移动(相当于剪切)
2 有没有指定location
内部表可以指定location,外部表也可以不指定location.外部表数据位置之所以没有变得是因为由location指向了数据原本存放的位置,如果对内部表做同样的设置,效果也是相同的.
当没有指定location时,不管内部表还是外部表都会在默认位置创建表目录.
因为创建外部表时往往会主动将外部表的location定位至数据所在位置,所以有"创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变"的表象产生.
删除表时有一点可以补充,truncate关键字只能删除内部表中的数据,而不能删除外部表中的数据.
本文详细阐述了在数据仓库中创建内部表与外部表的区别,包括数据移动、元数据及数据删除行为。内部表在创建时可能移动数据,并在删除时一并移除元数据与数据;外部表仅记录数据路径,删除时仅移除元数据,保留数据灵活性与安全性。
368

被折叠的 条评论
为什么被折叠?



