我在hive表中有默认的db,其中包含80个表 我创建了另外一个数据库,我想将所有表从默认数据库复制到新数据库。
有没有办法可以从One DB复制到其他DB,而无需创建单独的表。
如果有任何解决方案,请告诉我.. 提前致谢
答案 0 :(得分:29)
我可以想到几个选项。
使用CTAS。
CREATE TABLE NEWDB.NEW_TABLE1 AS select * from OLDDB.OLD_TABLE1;
CREATE TABLE NEWDB.NEW_TABLE2 AS select * from OLDDB.OLD_TABLE2;
...
使用Hive的IMPORT功能 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ImportExport
希望这会有所帮助。
答案 1 :(得分:4)
创建外部表new_db.table,如old_db.table location'(hdfs文件中的文件路径)';
如果你在表中有分区,那么你必须在new_db.table中添加分区。
答案 2 :(得分:2)
这些可能是将表从一个数据库复制/移动到另一个数据库的最快速,最简单的方法。
移动表格 source
从0.14开始,您可以使用以下语句将表从一个数据库移动到同一个Metastore中的另一个数据库:
alter table old_database.table_a rename to new_database.table_a;
如果table_a
是托管表,上述语句也会移动hdfs上的表数据。
复制表格
您始终可以使用CREATE TABLE <new_db>.<new_table> AS SELECT * FROM <old_db>.<old_table>;
语句。但我相信这种使用hdfs dfs -cp
复制数据库,然后使用LIKE
创建表格的替代方法,如果你的表格很大,可以快一点:
hdfs dfs -cp /user/hive/warehouse/<old_database>.db /user/hive/warehouse/<new_database>.db
然后在Hive中:
CREATE DATABASE <new_database>;
CREATE TABLE <new_database>.<new_table> LIKE <old_database>.<old_table>;
答案 3 :(得分:1)
您可以使用以下选项之一:
语法如下所示: EXPORT TABLE table_or_partition TO hdfs_path; IMPORT [[EXTERNAL] TABLE table_or_partition] FROM hdfs_path [LOCATION [table_location]];
一些示例语句如下所示: EXPORT TABLE TO'hdfs'中的位置;
使用test_db; 从“hdfs中的位置”进口;
导出导入也可以基于分区进行应用: EXPORT TABLE PARTITION(loc =“USA”)到'hdfs'中的位置;
以下导入命令导入外部表而不是托管表 IMPORT EXTERNAL TABLE来自'hdfs中的位置'LOCATION'/ location / of / external / table';