2014-10-29 40 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「/外部/表/位置/」;

    相關問題