如何将所有配置单元表从一个数据库复制到另一个数据库

时间:2014-10-29 17:21:06

标签: hive hiveql impala

我在hive表中有默认的db,其中包含80个表 我创建了另外一个数据库,我想将所有表从默认数据库复制到新数据库。

有没有办法可以从One DB复制到其他DB,而无需创建单独的表。

如果有任何解决方案,请告诉我.. 提前致谢

4 个答案:

答案 0 :(得分:29)

我可以想到几个选项。

  1. 使用CTAS。

    CREATE TABLE NEWDB.NEW_TABLE1 AS select * from OLDDB.OLD_TABLE1;
    CREATE TABLE NEWDB.NEW_TABLE2 AS select * from OLDDB.OLD_TABLE2;
    ...
    
  2. 使用Hive的IMPORT功能 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ImportExport

  3. 希望这会有所帮助。

答案 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';