为什么配置单元不允许使用CTAS创建外部表?

时间:2014-11-03 09:46:52

标签: hadoop hive

在hive中,CTAS创建外部表是一个语义错误,为什么? CTAS创建的表是原子的,而外部表意味着在删除表时不会删除数据,它们似乎没有冲突。

5 个答案:

答案 0 :(得分:3)

我在这里错过了什么吗?

试试这个......你应该能够用CTAS创建一个外部表。

CREATE TABLE ext_table LOCATION '/user/XXXXX/XXXXXX' 
AS SELECT * from managed_table;

我能够创造一个。我使用的是0.12。

答案 1 :(得分:2)

在Hive中,当我们创建表(非外部)时,数据将存储在/ user / hive / warehouse中。 但是在外部hive表创建期间,文件将位于其他任何位置,我们只是指向该hdfs目录并将数据公开为hive表以运行hive查询等。 这个SO更准确地回答Create hive table using "as select" or "like" and also specify delimiter

答案 2 :(得分:0)

我认为这是一个语义错误,因为它错过了外部表定义的最大imp参数。数据文件的外部位置!根据定义,1。外部意味着数据位于蜂巢数据仓库目录之外的蜂巢控制之外。 2.如果删除表,则数据保持不变,仅从hive Metastore中删除表定义。所以, 一世。如果CTAS与托管表一起使用,则新的ext表将在仓库中具有文件,该文件将被删除,丢弃表使#2错误 II。如果CTAS与其他外部表一起使用,则2个表将指向相同的文件位置。

答案 3 :(得分:0)

有时它发生在我身上,因为我没有以适当的用户身份登录。

答案 4 :(得分:0)

CTAS使用所述表的架构和数据使用新名称创建托管配置单元表。

您可以使用以下方法将其转换为外部表:

ALTER TABLE <TABLE_NAME> SET TBLPROPERTIES('EXTERNAL'='TRUE');