22

Elastic MapReduceインタラクティブセッションを介してHiveテーブルを作成し、次のようにCSVファイルからデータを入力しました。

CREATE TABLE csvimport(id BIGINT, time STRING, log STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';

LOAD DATA LOCAL INPATH '/home/hadoop/file.csv' OVERWRITE INTO TABLE csvimport;

ここで、HiveテーブルをS3バケットに保存して、MapReduceインスタンスを終了するとテーブルが保持されるようにします。

誰かがこれを行う方法を知っていますか?

4

3 に答える 3

26

はい、ハイブセッションの開始時と終了時にデータをエクスポートおよびインポートする必要があります

これを行うには、S3 バケットとディレクトリにマッピングされるテーブルを作成する必要があります

CREATE TABLE csvexport (
  id BIGINT, time STRING, log STRING
  ) 
 row format delimited fields terminated by ',' 
 lines terminated by '\n' 
 STORED AS TEXTFILE
 LOCATION 's3n://bucket/directory/';

データを s3 テーブルに挿入し、挿入が完了すると、ディレクトリに csv ファイルが作成されます

 INSERT OVERWRITE TABLE csvexport 
 select id, time, log
 from csvimport;

テーブルが保持されるようになり、新しいハイブ インスタンスを作成するときに、データを再インポートできます

テーブルは、使用する場所に応じて、いくつかの異なる形式で保存できます。

于 2012-03-06T15:52:24.177 に答える
20

上記のクエリでは、EXTERNAL キーワードを使用する必要があります。つまり、次のようになります。

CREATE EXTERNAL TABLE csvexport ( id BIGINT, time STRING, log STRING ) 
row format delimited fields terminated by ',' lines terminated by '\n' 
STORED AS TEXTFILE LOCATION 's3n://bucket/directory/';
INSERT OVERWRITE TABLE csvexport select id, time, log from csvimport;

別の方法は、クエリを使用することです

INSERT OVERWRITE DIRECTORY 's3n://bucket/directory/'  select id, time, log from csvimport;

テーブルは S3 ディレクトリに格納され、HIVE のデフォルトの区切り文字が付けられます。

于 2012-03-27T05:02:04.060 に答える