我通过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实例后保留表。
有谁知道怎么做?
答案 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;