在hive中,CTAS创建外部表是一个语义错误,为什么? CTAS创建的表是原子的,而外部表意味着在删除表时不会删除数据,它们似乎没有冲突。
答案 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');