将Hive表导出到S3存储桶

时间:2012-02-28 20:48:04

标签: amazon-s3 hive elastic-map-reduce emr

我通过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实例后保留表。

有谁知道怎么做?

3 个答案:

答案 0 :(得分:22)

是的,您必须在蜂巢会话的开始和结束时导出和导入数据

为此,您需要创建一个映射到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;

现在保留了您的表格,当您创建新的配置单元实例时,您可以重新导入数据

您的表格可以存储在几种不同的格式中,具体取决于您要使用它的位置。

答案 1 :(得分:18)

以上查询需要使用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;

该表存储在带有HIVE默认分隔符的S3目录中。

答案 2 :(得分:0)

如果您可以访问aws控制台并拥有" Access Key Id"和" Secret Access Key"为您的帐户

你也可以尝试这个..

CREATE TABLE csvexport(id BIGINT, time STRING, log STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION 's3n://"access id":"secret key"@bucket/folder/path';

现在插入上述其他数据。

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