基于下面的Hive文档:
重命名表
ALTER TABLE table_name RENAME TO new_table_name;
此语句允许您将表的名称更改为其他名称。
从版本0.6开始,托管表上的重命名也会移动其HDFS位置。 (较旧的Hive版本只是在Metastore中重命名了表而没有移动HDFS位置。)
有没有办法在不改变位置的情况下重命名表?
答案 0 :(得分:11)
是的,我们可以做到。您只需要依次执行以下三个命令即可。
假设您在蜂巢中有一个外部表test_1。您想将其重命名为test_2,它应该指向test_2的位置而不是test_1的位置。然后,您需要使用以下命令将此表转换为托管表。 test_1->指向test_1的位置
ALTER TABLE db_name.test_1 SET TBLPROPERTIES('EXTERNAL'='FALSE');
重命名表名称。
ALTER TABLE db_name.test_1 RENAME TO db_name.test_2;
重命名后再次将托管表转换为外部表。
ALTER TABLE db_name.test_2 SET TBLPROPERTIES('EXTERNAL'='TRUE');
db_name.test_2表将指向test_2的位置。如果我们不创建托管表就这样做,它将指向test_1位置。
答案 1 :(得分:4)
从Hive 2.2.0开始,只有在没有LOCATION子句且在其数据库目录下创建表时,才会移动托管表的HDFS位置。Link
答案 2 :(得分:1)
这是执行的命令
ALTER TABLE old_ratings RENAME TO ratings;
答案 3 :(得分:0)
ALTER TABLE不像在CREATE或SELECT中那样遵循Hive中的databasename.tablename语法。 首先提及数据库名称,然后运行alter table语句。
语法如下
USE databasename;
ALTER TABLE old_tablename RENAME TO new_tablename;