hive外部表的意义是什么?

时间:2015-12-03 18:43:27

标签: hadoop mapreduce hive

步骤1.我创建了一个hive外部表" test"并给出一些位置说' / user / hive2' 第2步。我在" test"中加载文件表。
第3步。我从测试中选择*。我得到了我的记录 第4步。我逐滴放表 步骤5.我从测试中选择*并找不到表格。

那么使用外部表有什么意义呢?如果删除元数据" test"表和我无法查询任何内容,那为什么我们使用外部表?

5 个答案:

答案 0 :(得分:2)

@Nishant:在本论坛上提出一般性问题之前,你应该先做一些功课。无论如何,这里有一个快速链接,详细解释了蜂巢外部表 - External Hive Tables

删除内部表时,它会删除数据,并且还会删除元数据。您将无法再访问数据

删除外部表时,它只会删除元数据。这意味着蜂巢现在对这些数据一无所知。它不会触及数据本身。您现在可以访问数据并执行任何操作(如果需要)。当您需要为数据设置一个停靠点然后将整个数据转储到托管表以进行配置单元操作时,外部表也是首选

另外,这是来自另一个stackoverflow主题

的注释

在以下情况下使用EXTERNAL表:

  1. 数据也在Hive之外使用。例如,数据文件由不锁定文件的现有程序读取和处理。
  2. 即使在DROP TABLE之后,数据也需要保留在基础位置。如果您将多个模式(表或视图)指向单个数据集,或者您正在迭代各种可能的模式,则可以应用此方法。
  3. 您想使用自定义位置,例如ASV。
  4. Hive不应该拥有数据和控制设置,dirs等,你有另一个程序或进程可以做这些事情。
  5. 您不是基于现有表格(AS SELECT)创建表格。
  6. 在以下情况下使用INTERNAL表:

    1. 数据是暂时的。
    2. 您希望Hive完全管理表和数据的生命周期。
    3. 您希望Hive完全管理表和数据的生命周期。

      希望这有用。

答案 1 :(得分:0)

一些事情。

  1. 您正在指定数据的位置。如果您只是创建一个托管表,Hive将决定它存储表数据的位置,但是在外部表中,您可以确定该位置。

  2. 外部表可以指向已存在于指定位置的数据。在您的示例中,您将插入一个空的外部表,但一个用例是创建指向数据所在位置的表。换句话说,如果数据已经存在,则根本不需要插入表格。

  3. 最重要的是,如果删除表格,则不会删除数据。在托管表中,如果插入数据然后删除表,Hive将从Metastore中删除表定义,但也会删除数据本身。在外部表中,仅删除了Metastore引用,并且数据保留在您指定的位置。

答案 2 :(得分:0)

步骤4.我逐滴放表。

步骤5.我从测试中选择*并找不到表格。

让我们假设您重新创建了表格测试。

尝试从测试中选择* 。此查询返回数据bcoz表test是外部表。

表格被删除(元数据),但数据存在于HDFS中。

内部表也不会发生同样的事情,它也会从HDFS中删除数据。

答案 3 :(得分:0)

  

那么使用外部表有什么意义呢?如果删除元数据" test"表和我无法查询任何内容,那为什么我们使用外部表?

删除外部表时,基础数据文件保持不变。如果要查询表格,请不要删除元数据。如何通过删除元数据来查询表?

与内部表不同,内部表是临时数据并在创建表后被删除,外部表仍将数据保存在源目录中。看一下相关的question

即使删除了元数据,您仍然可以访问源目录 中的数据文件。

答案 4 :(得分:-1)

  1. 如果您想通过ETL工具访问该表,那么我们必须创建外部表。
  2. 如果要创建与表1具有相同模式的表2,则外部表很有用。 创建外部表table2为(select * from table1)
  3. 如果要通过保持原有数据集将新数据集添加到表中,那么外部表非常有用。