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;

该表使用 HIVE 默认分隔符存储在 S3 目录中。

于 2012-03-27T05:02:04.060 回答
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;
于 2015-11-05T16:20:27.053 回答