我能否在Hive中将内部表更改为外部表?

35

我在Hive上创建了一张托管表,但它本应该是外部表,是否可以更改表类型而不会丢失数据?

3个回答

81
ALTER TABLE <table> SET TBLPROPERTIES('EXTERNAL'='TRUE')

注意:EXTERNAL 和 TRUE 需要大写,否则它们将无法正常工作。


1
这并不会将您的数据实际移动到外部位置,您的数据仍然在HDFS上。@Olaf的解决方案是正确的。 - soulmachine
正如@Shan Hadoop Learner所提到的,这仅适用于非事务表,而托管表的默认行为并非如此。很可能需要将表模式重新创建为外部表,指定数据位置,然后使用数据进行INSERT OVERWRITE。 - DataSci-IOPsy

3
alter table <table_name> SET TBLPROPERTIES('EXTERNAL'='TRUE')  

注意:它仅适用于非事务性内部/托管表。

1

您可以将数据文件从Hive数据位置复制到计划存储外部表的位置,删除该表并重新创建为外部表。


4
搞定了! ALTER TABLE <table> SET TBLPROPERTIES('EXTERNAL'='TRUE'); 翻译:修改表格 <table> 的属性,设置为外部表。 - George TeVelde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接