我们何时应该在Hive中使用外部表和内部表?

时间:2016-09-13 17:39:48

标签: hive

我理解hive中内部表和外部表之间的区别如下所示  1)如果我们删除内部表文件并且元数据将被删除,但是,在外部仅元数据的情况下    删除  2)如果文件数据需要由其他工具/应用程序共享,那么我们去外部表,如果没有     内部表,这样如果我们删除表(外部)数据仍然可用于其他工具/应用程序

我已经完成了问题的答案“Hive内部表和外部表之间的区别?” 但我仍然不清楚内部表的正确用例  所以我的问题是为什么我需要制作内部表?为什么我不能把所有东西都当成外表呢?

2 个答案:

答案 0 :(得分:1)

在以下情况下使用EXTERNAL表: 数据也在Hive之外使用。 例如,数据文件由不锁定文件的现有程序读取和处理。 数据是永久性的,即在需要时使用。

在以下情况下使用INTERNAL表: 数据是暂时的。 您希望Hive完全管理表和数据的生命周期。

答案 1 :(得分:0)

让我们通过两种简单的情况来理解它:

  • 假设您有一个数据集,并且必须对其执行一些分析/问题语句。由于问题陈述的性质,HiveQL可以完成其中的少数工作,其中很少需要Pig Latin的工作,很少需要Map Reduce等工作的完成。在这种情况下,External Table成为现实-同一数据集可用于解决整个分析问题,而不必为不同的工具使用同一数据集的不同副本。在这里,Hive不需要对数据集的权限,因为有几种工具可以使用它。

  • 在某些情况下,仅HiveQL可以解决整个分析/问题陈述。在这种情况下,Internal Table成为现实-意味着您可以将整个数据集放入Hive的Warehouse中,并且Hive将对数据集拥有完全的权限。