有没有办法改变数据库指向的位置?
我尝试了以下方法:
alter database <my_db> set DBPROPERTIES('hive.warehouse.dir'='<new_hdfs_loc>');
alter database <my_db> set DBPROPERTIES('location'='<new_hdfs_loc>');
alter database <my_db> set location '<new_hdfs_loc>';
前两个alter语句只更改了数据库属性,但数据库仍指向同一位置;而第三个alter语句给了我语义错误。
任何帮助都将受到高度赞赏。
答案 0 :(得分:7)
经过一些试验和错误后,我了解到Hive在数据库上运行ALTER时不支持以下两个条件。
但是,我找到了一个解决方法的链接,该链接涉及对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-1537和https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable/PartitionLocation。
要更改表的位置,您可以运行ALTER TABLE <table> SET LOCATION "/path/to/new/location";
这也可以在分区级别应用。
答案 1 :(得分:-1)
您可以更改数据库位置。我在Hive 2.1.1(CDH 6.3.3)中实现了
CREATE DATABASE mydb LOCATION 'hdfs://<namespace_name>/mydirectory1/'
DESCRIBE DATABASE mydb
并查看当前位置。ALTER DATABASE mydb SET LOCATION 'hdfs://<namespace_name>/mydirectory2/'