web-dev-qa-db-ja.com

1つのデータベースから他のデータベースにすべてのHiveテーブルをコピーする方法

80個のテーブルを含むHiveテーブルにデフォルトのdbがあります。
もう1つのデータベースを作成しました。すべてのテーブルをデフォルトのDBから新しいデータベースにコピーしたいと思います。

個別のテーブルを作成せずに、1つのDBから他のDBにコピーする方法はありますか。

解決策があれば教えてください。

19
Aman

いくつかのオプションが考えられます。

  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

お役に立てれば。

29
Venkat Ankam

old_db.tableのような外部テーブルnew_db.tableを作成するlocation '(hdfsファイル内のファイルのパス)';

テーブルにパーティションがある場合、new_db.tableにパーティションを追加する必要があります。

4
bunty

次のオプションのいずれかにアプローチできます。

構文は次のようになります。EXPORT TABLE table_or_partition TO hdfs_path; IMPORT [[EXTERNAL] TABLE table_or_partition] FROM hdfs_path [LOCATION [table_location]];

いくつかのサンプルステートメントは次のようになります。EXPORT TABLE TO 'location in hdfs';

Test_dbを使用します。 IMPORT FROM 'location in hdfs';

エクスポートインポートは、パーティション単位でも実行できます。EXPORTTABLE PARTITION(loc = "USA")to 'location in hdfs';

以下のインポートコマンドは、管理対象のテーブルではなく外部テーブルにインポートしますIMPORT EXTERNAL TABLE FROM 'location in hdfs' LOCATION ‘/ location/of/external/table';

1
Sohil Shivani

これらはおそらく、あるdbから別のdbにテーブルをコピー/移動するための最速かつ最も簡単な方法です。

テーブルを移動するにはsource

0.14以降、次のステートメントを使用して、同じメタストア内のデータベース間でテーブルを移動できます。

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

そして、ハイブで:

CREATE DATABASE <new_database>;
CREATE TABLE <new_database>.<new_table> LIKE <old_database>.<old_table>;
1
pratpor