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

Osi*_*ris 17 hadoop hive hiveql

基于下面的Hive文档:

重命名表

ALTER TABLE table_name RENAME TO new_table_name;

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

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

有没有办法重命名表而不改变位置?

小智 16

是的,我们可以做到这一点.您只需要按顺序执行以下三个命令.

  1. 假设你在hive中有一个外部表test_1.并且你想重命名test_2,它应该指向test_2位置而不是test_1.然后,您需要使用以下命令将此表转换为Managed表.test_1 - >指向test_1位置

    ALTER TABLE db_name.test_1 SET TBLPROPERTIES('EXTERNAL'='FALSE');
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重命名表名.

    ALTER TABLE db_name.test_1 RENAME TO db_name.test_2;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重命名后,再次将托管表转换为外部表.

    ALTER TABLE db_name.test_2 SET TBLPROPERTIES('EXTERNAL'='TRUE');
    
    Run Code Online (Sandbox Code Playgroud)

db_name.test_2表将指向test_2位置.如果我们在不创建托管表的情况下执行此操作,则会指向test_1位置.


sdi*_*kby 5

从Hive 2.2.0开始,仅在创建表时没有LOCATION子句并且在其数据库目录下移动了托管表的HDFS位置。链接


小智 5

ALTER TABLE 不像在 CREATE 或 SELECT 中那样遵循 Hive 中的 databasename.tablename 语法。首先提到数据库名,然后运行alter table 语句。

语法如下

USE databasename;
ALTER TABLE old_tablename RENAME TO new_tablename;
Run Code Online (Sandbox Code Playgroud)