2012-02-28 41 views
18

我通过弹性MapReduce互动对话期间建立的蜂巢表,并从CSV填充它的文件是这样的:出口蜂巢表的S3存储

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; 

我现在想的蜂巢表存储在一个S3存储桶,因此一旦我终止MapReduce实例,该表就会被保留。

有谁知道如何做到这一点?

回答

20

是必须导出,并在开始和你的蜂巢会议结束

要做到这一点,你需要创建一个映射到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; 

你的表现保存,当你创建一个新的蜂巢比如你可以重新导入您的数据

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

17

上面的查询需要使用外部关键字,即:

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目录。

+0

这不会复制标题。有没有办法复制标题呢? – 2016-11-02 07:22:50

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;