Hive更改表名FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Una ble

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Una
ble to alter table. Unable to access old location hdfs://mycluster/user/sjk/xx for table db1.xx

Hive更改表名FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Una ble

 

【注】

注意:重命名不能简单的 ALETR TABLE table_a CHANGE NAME TO table_b,因为在Hive中,数据存储在hdfs中,必须对存储的数据文件做修改

RENAME TABLE

ALTER TABLE table_name RENAME TO new_table_name
这个命令可以让用户为表更名。数据所在的位置和分区名并不改变。换而言之,老的表名并未“释放”,对老表的更改会改变新表的数据?

不,数据所在的位置会移动到hive表默认路径下。如果建表是指定路径LOCATION,那么重名之后,路径会变更。


例子:创建表,插入数据

Hive更改表名FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Una ble

在hdfs上查看到数据: 

Hive更改表名FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Una ble改名:报错。

Hive更改表名FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Una ble

大致意思:

失败:执行错误,从org.apache.hadoop.hive.ql. execl . ddltask返回代码1。不能

更改表格。无法为表db1.ss访问旧位置hdfs://mycluster/user/sjk/ss

所以:根据上边错误提示中的路径,删除它。

Hive更改表名FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Una ble

再次改名:

Hive更改表名FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Una ble

但是,数据由于我们删除了,所以也会丢失,

Hive更改表名FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Una ble

并且找不到表的位置:

Hive更改表名FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Una ble

总之,不晓得机制是怎么回事?不过在default默认的数据库中,改名是直接可以完成的。