2014-10-29 53 views
16

我在包含80个表的配置元表中具有默认数据库。
我已经创建了另外一个数据库,我想将所有表从默认数据库复制到新数据库。如何将所有配置单元表从一个数据库复制到其他数据库

有什么办法可以从一个数据库复制到其他数据库,而无需创建单独的表。

请让我知道如果任何解决方案.. 预先感谢

回答

21

我能想到几个选项。

  1. 使用CTAS。蜂巢 灵https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ImportExport

CREATE TABLE NEWDB.NEW_TABLE1 AS select * from OLDDB.OLD_TABLE1; 
CREATE TABLE NEWDB.NEW_TABLE2 AS select * from OLDDB.OLD_TABLE2; 
... 
  • 采用进口的特性,这有助于。

  • +0

    请注意,'show databases'会提供80个需要的名称,然后可以很容易地在excel等工具中创建80行。 – 2016-01-27 15:48:39

    +0

    这是好东西:) – 2016-08-05 20:10:00

    +0

    第1号对我很好,除了分区不复制。任何方式来实现这一目标? – vk1011 2017-01-16 02:59:29

    4

    创建外部表new_db.table像old_db.table位置'(hdfs文件中的文件路径)';

    如果你在表中有分区,那么你必须在new_db.table中添加分区。

    1

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

    要将表source

    由于0.14,你可以用下面的语句从一个数据库移到表到另一个在同一metastore:

    alter table old_database.table_a rename to new_database.table_a; 
    

    以上陈述也将移动台关于hdfs的数据如果table_a是托管表。

    复制表

    您可以随时使用CREATE TABLE <new_db>.<new_table> AS SELECT * FROM <old_db>.<old_table>;语句。但我相信,随着LIKE复制使用hdfs dfs -cp数据库,然后创建表的这种交替的方法可以快一点,如果你的表是巨大的:

    hdfs dfs -cp /user/hive/warehouse/<old_database>.db /user/hive/warehouse/<new_database>.db 
    

    然后在蜂巢:

    CREATE DATABASE <new_database>; 
    CREATE TABLE <new_database>.<new_table> LIKE <old_database>.<old_table>; 
    
    +0

    这不是一个“复制”,而是一个“移动”。 – 2017-05-31 14:43:52

    +0

    @ThomasDecaux我的不好。已经更新了复制的答案。谢谢。 – PratPor 2017-06-01 05:16:28

    1

    您可以进场以下选项之一:

    语法如下所示: EXPORT TABLE table_or_partition TO hdfs_path; IMPORT [[EXTERNAL] TABLE table_or_partition] FROM hdfs_path [LOCATION [table_location]];

    一些示例语句如下所示: 导出表'位于hdfs';

    使用test_db; IMPORT FROM'location in hdfs';导出导入也可以在分区的基础上应用: EXPORT TABLE PARTITION(loc =“USA”)to'location in hdfs';

    的下面导入命令进口到外部表,而不是管理的一个 引入外部TABLE FROM“位置在HDFS” LOCATION“/外部/表/位置/”;

    相关问题