将 Hive 表导出到 S3 存储桶
Posted
技术标签:
【中文标题】将 Hive 表导出到 S3 存储桶【英文标题】:Exporting Hive Table to a S3 bucket 【发布时间】:2012-03-18 08:53:12 【问题描述】:我通过 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 实例后保留该表。
有人知道怎么做吗?
【问题讨论】:
【参考方案1】:是的,您必须在 hive 会话开始和结束时导出和导入数据
为此,您需要创建一个映射到 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;
您的表现在被保留,当您创建一个新的配置单元实例时,您可以重新导入您的数据
您的表格可以以几种不同的格式存储,具体取决于您要在哪里使用。
【讨论】:
在 S3 中创建的文件没有标题和随机文件名。有没有办法解决这个问题?检查了SO上的一些帖子,找不到任何相关答案。 与上述相同的评论 + 如何在其中填写 AWS 凭证?我的意思是 ID 和密钥。谢谢。【参考方案2】:以上查询需要使用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 目录中。
【讨论】:
这不会复制标题。有没有办法复制标题呢? @MohammadAdnan 你找到复制标题的方法了吗? @MohammadAdnan 你找到复制标题的方法了吗?【参考方案3】:如果您可以访问 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;
【讨论】:
以上是关于将 Hive 表导出到 S3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章