更改Hive数据库位置

Har*_*man 6 hadoop hive hdfs cloudera

有没有办法改变数据库指向的位置?

我尝试了以下方法:

  1. alter database <my_db> set DBPROPERTIES('hive.warehouse.dir'='<new_hdfs_loc>');

  2. alter database <my_db> set DBPROPERTIES('location'='<new_hdfs_loc>');

  3. alter database <my_db> set location '<new_hdfs_loc>';

前两个alter语句只更改了DB属性,但数据库仍指向同一位置; 而第三个alter语句给了我语义错误.

任何帮助将受到高度赞赏.

bra*_*ell 8

经过一些试验和错误,我了解到Hive在数据库上运行ALTER时不支持以下两个条件.

  1. 不允许更改目录位置或数据库名称.
  2. 不允许删除或取消设置之前定义的db属性.

但是,我找到了一个解决方法的链接,该链接涉及对Hive Metastore的直接数据库更新,只需在HDFS上移动目录. http://gaganonthenet.com/2015/02/23/hive-change-location-for-database-or-schema/

以前的答案不正确:

在alter之前创建的表将存在于之前的位置.只有在alter之后创建的表才会被放入新位置.您必须手动移动HDFS上的目录并更新表位置.有关数据库和表的详细信息,请参阅https://issues.apache.org/jira/browse/HIVE-1537https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable/PartitionLocation位置.

要更改表的位置,您可以运行ALTER TABLE <table> SET LOCATION "/path/to/new/location"; 它也可以在分区级别应用.