步骤1.我创建了一个hive外部表" test"并给出一些位置说' / user / hive2'
第2步。我在" test"中加载文件表。
第3步。我从测试中选择*。我得到了我的记录
第4步。我逐滴放表
步骤5.我从测试中选择*并找不到表格。
那么使用外部表有什么意义呢?如果删除元数据" test"表和我无法查询任何内容,那为什么我们使用外部表?
答案 0 :(得分:2)
删除内部表时,它会删除数据,并且还会删除元数据。您将无法再访问数据
删除外部表时,它只会删除元数据。这意味着蜂巢现在对这些数据一无所知。它不会触及数据本身。您现在可以访问数据并执行任何操作(如果需要)。当您需要为数据设置一个停靠点然后将整个数据转储到托管表以进行配置单元操作时,外部表也是首选
另外,这是来自另一个stackoverflow主题
的注释在以下情况下使用EXTERNAL表:
在以下情况下使用INTERNAL表:
您希望Hive完全管理表和数据的生命周期。
希望这有用。
答案 1 :(得分:0)
一些事情。
您正在指定数据的位置。如果您只是创建一个托管表,Hive将决定它存储表数据的位置,但是在外部表中,您可以确定该位置。
外部表可以指向已存在于指定位置的数据。在您的示例中,您将插入一个空的外部表,但一个用例是创建指向数据所在位置的表。换句话说,如果数据已经存在,则根本不需要插入表格。
最重要的是,如果删除表格,则不会删除数据。在托管表中,如果插入数据然后删除表,Hive将从Metastore中删除表定义,但也会删除数据本身。在外部表中,仅删除了Metastore引用,并且数据保留在您指定的位置。
答案 2 :(得分:0)
步骤4.我逐滴放表。
步骤5.我从测试中选择*并找不到表格。
让我们假设您重新创建了表格测试。
尝试从测试中选择* 。此查询返回数据bcoz表test是外部表。
表格被删除(元数据),但数据存在于HDFS中。
内部表也不会发生同样的事情,它也会从HDFS中删除数据。
答案 3 :(得分:0)
那么使用外部表有什么意义呢?如果删除元数据" test"表和我无法查询任何内容,那为什么我们使用外部表?
删除外部表时,基础数据文件保持不变。如果要查询表格,请不要删除元数据。如何通过删除元数据来查询表?
与内部表不同,内部表是临时数据并在创建表后被删除,外部表仍将数据保存在源目录中。看一下相关的question
即使删除了元数据,您仍然可以访问源目录 中的数据文件。
答案 4 :(得分:-1)