web-dev-qa-db-ja.com

あるデータベースから別のデータベースへのHiveテーブルの転送

Hiveテーブルをあるデータベースから別のデータベースに移動する必要があります。どうやってやるの?

26
user2942227

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

use old_database;
alter table table_a rename to new_database.table_a

上記のステートメントは、table_aは管理対象テーブルです。

59
Jay

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

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

4
bunty

試すことができます- [〜#〜] ctas [〜#〜]

USE NEW_DB;

CREATE TABLE table
AS
SELECT * FROM OLD_DB.table;

DROP TABLE OLD_DB.table;
3
user 923227

テーブルがパーティション化されている場合、基本的には、パーティション化されたデータを古いテーブルから新しいテーブルにコピーし、古いテーブルを削除できます。

  1. use new_db;
  2. 新しいデータベースに新しいテーブルを作成します。

    Create Table table_name;
    
  3. 次のコマンドを使用して、古いテーブルから新しいテーブルにデータを挿入します。

    insert into new_table_name partition (partition_column='value') 
      select col1, col2, col3, col4 from old_db.old_table_name 
      where partition_column='value';
    
1
VPS

これは役に立つかもしれません。

EXPORT TABLE table_or_partition TO hdfs_path;
IMPORT [[EXTERNAL] TABLE table_or_partition] FROM hdfs_path [LOCATION[table_location]];

いくつかのサンプルステートメントは次のようになります。

EXPORT TABLE <table name> TO 'location in hdfs';

Use test_db;
IMPORT FROM 'location in hdfs';

Export Import can be appled on a partition basis as well:
EXPORT TABLE <table name> PARTITION (loc="USA") to 'location in hdfs';

以下のインポートコマンドは、管理対象テーブルではなく外部テーブルにインポートします

IMPORT EXTERNAL TABLE FROM 'location in hdfs' LOCATION ‘/location/of/external/table’;
1
Sohil Shivani

https://issues.Apache.org/jira/browse/Hive-2496

その改善はまだ開いています。現在、HiveではなくImpalaで可能であることを知っています。

開発は行き詰っているようです。そのページでその問題に投票して、注目を集めることができます。

0
Tagar

移行するデータベースは、データベースコネクタを提供します。 sqoopとデータベースコネクタの助けを借りて、移行することができます。データの移行先となるデータベースのタイプについてより具体的に説明している場合は素晴らしいことです

0
kris433

回答には多くの方法がありますが、何をいつ使用するかについてのガイドはありません。

  1. ターゲットが管理テーブルの場合、CTASを使用します。

    CREATE NEW_DB.TABLE table AS SELECT * FROM OLD_DB.TABLE;
    DROP TABLE OLD_DB.TABLE;
    
  2. 単純なテーブル名の変更でそれを行いたいが、テーブルの場所は変わらない場合:

    alter table old_database.table_a rename to new_database.table_a;
    
  3. CREATE LIKEおよびINSERTの使用:

    CREATE NEW_DB.TABLE table LIKE OLD_DB.TABLE;
    INSERT INTO TABLE new_table_name partition (partition_column) select col1, col2, col3, col4 from old_db.old_table_name where partition_column='value';
    DROP TABLE old_db.old_table_name;
    
0
Ani Menon