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

Ama*_*man 20 hive hiveql impala

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

有没有办法我可以从一个数据库复制到其他数据库,而无需创建单个表.

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

Ven*_*kam 31

我可以想到几个选项.

  1. 使用CTAS.

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

希望这可以帮助.

  • 第一个对我来说很棒,除了分区不会复制。有什么办法做到这一点? (2认同)

pra*_*por 5

这些可能是将表从一个数据库复制/移动到另一个数据库的最快、最简单的方法。

移动表

从 0.14 开始,您可以使用以下语句将表从一个数据库移动到同一元存储中的另一个数据库:

alter table old_database.table_a rename to new_database.table_a;
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

然后在 Hive 中:

CREATE DATABASE <new_database>;
CREATE TABLE <new_database>.<new_table> LIKE <old_database>.<old_table>;
Run Code Online (Sandbox Code Playgroud)

  • hdfs 方法会弄乱表的元数据,从而导致问题。 (2认同)