如何在不更改位置的情况下重命名配置单元表?

时间:2016-03-12 21:24:45

标签: hadoop hive hiveql

基于下面的Hive文档:

  

重命名表

     

ALTER TABLE table_name RENAME TO new_table_name;

     

此语句允许您将表的名称更改为其他名称。

     

从版本0.6开始,托管表上的重命名也会移动其HDFS位置。 (较旧的Hive版本只是在Metastore中重命名了表而没有移动HDFS位置。)

有没有办法在不改变位置的情况下重命名表?

4 个答案:

答案 0 :(得分:11)

是的,我们可以做到。您只需要依次执行以下三个命令即可。

  1. 假设您在蜂巢中有一个外部表test_1。您想将其重命名为test_2,它应该指向test_2的位置而不是test_1的位置。然后,您需要使用以下命令将此表转换为托管表。 test_1->指向test_1的位置

    ALTER TABLE db_name.test_1 SET TBLPROPERTIES('EXTERNAL'='FALSE');
    
  2. 重命名表名称。

    ALTER TABLE db_name.test_1 RENAME TO db_name.test_2;
    
  3. 重命名后再次将托管表转换为外部表。

    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;