将Hive表导出到S3存储桶

see*_*ead 20 hive amazon-s3 elastic-map-reduce emr

我通过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;
Run Code Online (Sandbox Code Playgroud)

我现在想要将Hive表存储在S3存储桶中,以便在终止MapReduce实例后保留表.

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

use*_* Me 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/';
Run Code Online (Sandbox Code Playgroud)

将数据插入到s3表中,当插入完成时,该目录将具有csv文件

 INSERT OVERWRITE TABLE csvexport 
 select id, time, log
 from csvimport;
Run Code Online (Sandbox Code Playgroud)

您的表现在已保留,当您创建新的配置单元实例时,您可以重新导入数据

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


小智 18

以上Query需要使用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;
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用查询

INSERT OVERWRITE DIRECTORY 's3n://bucket/directory/'  select id, time, log from csvimport;
Run Code Online (Sandbox Code Playgroud)

该表存储在带有HIVE默认分隔符的S3目录中.