Hiveテーブルをあるデータベースから別のデータベースに移動する必要があります。どうやってやるの?
0.14以降、次のステートメントを使用して、同じメタストア内のデータベース間でテーブルを移動できます。
use old_database;
alter table table_a rename to new_database.table_a
上記のステートメントは、table_a
は管理対象テーブルです。
old_db.tableのような外部テーブルnew_db.tableを作成するlocation '(hdfsファイル内のファイルのパス)';
テーブルにパーティションがある場合、new_db.tableにパーティションを追加する必要があります。
試すことができます- [〜#〜] ctas [〜#〜]
USE NEW_DB;
CREATE TABLE table
AS
SELECT * FROM OLD_DB.table;
DROP TABLE OLD_DB.table;
テーブルがパーティション化されている場合、基本的には、パーティション化されたデータを古いテーブルから新しいテーブルにコピーし、古いテーブルを削除できます。
use new_db;
新しいデータベースに新しいテーブルを作成します。
Create Table table_name;
次のコマンドを使用して、古いテーブルから新しいテーブルにデータを挿入します。
insert into new_table_name partition (partition_column='value')
select col1, col2, col3, col4 from old_db.old_table_name
where partition_column='value';
これは役に立つかもしれません。
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’;
https://issues.Apache.org/jira/browse/Hive-2496
その改善はまだ開いています。現在、HiveではなくImpalaで可能であることを知っています。
開発は行き詰っているようです。そのページでその問題に投票して、注目を集めることができます。
移行するデータベースは、データベースコネクタを提供します。 sqoopとデータベースコネクタの助けを借りて、移行することができます。データの移行先となるデータベースのタイプについてより具体的に説明している場合は素晴らしいことです
回答には多くの方法がありますが、何をいつ使用するかについてのガイドはありません。
ターゲットが管理テーブルの場合、CTASを使用します。
CREATE NEW_DB.TABLE table AS SELECT * FROM OLD_DB.TABLE;
DROP TABLE OLD_DB.TABLE;
単純なテーブル名の変更でそれを行いたいが、テーブルの場所は変わらない場合:
alter table old_database.table_a rename to new_database.table_a;
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;