将 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 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

Hive中的桶表入门(适用于抽样查询)

Hive常用命令

Hive的分区表与分桶表&内部表外部表

如何将 AWS DynamoDB 表导出到 S3 存储桶?

最佳方法:如何将 dynamodb 表导出到 csv 并将其存储在 s3

入门大数据---Hive分区表和分桶表