为什么hive不允许使用CTA创建外部表?

gzszwxb4  于 2021-06-02  发布在  Hadoop
关注(0)|答案(4)|浏览(439)

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

x9ybnkn6

x9ybnkn61#

ctas使用所述表的模式和数据创建具有新名称的托管配置单元表。
可以使用以下方法将其转换为外部表:

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

deyfvvtc2#

我是不是漏了什么?
试试这个…你应该可以用CTA创建一个外部表。

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

我创造了一个。我用的是0.12。

rqqzpn5f

rqqzpn5f3#

我认为这是一个语义错误,因为它遗漏了外部表定义中最重要的imp参数。数据文件的外部位置!根据定义,1。外部表示数据在配置单元数据仓库目录之外的配置单元控制之外。2如果表被删除,数据将保持完整,只有表定义将从配置单元元存储中删除。所以,我。如果ctas是托管表,那么新ext表将在仓库中有文件,该文件将被删除,drop table making#2 wrong ii。如果ctas与其他外部表一起使用,那么这两个表将指向相同的文件位置。

v1uwarro

v1uwarro4#

在hive中,当我们创建一个表(不是外部的)时,数据将存储在/user/hive/warehouse中。但是在创建外部配置单元表的过程中,文件将位于其他任何位置,我们只是指向该hdfs目录,并将数据作为配置单元表公开,以运行配置单元查询等。这样可以更精确地使用“as select”或“like”创建配置单元表,并指定分隔符

相关问题