将数据从Hive写入Amazon S3,同时保持表分区目录结构

时间:2019-02-27 20:12:32

标签: amazon-web-services hadoop amazon-s3 hive amazon-athena

说我在Hive中有一个名为T1的表。它由列dt划分,该列是日期字段。在配置单元metastore中,目录结构包含一个名为表T1的文件夹,其子目录位于-每个日期一个文件夹。

我的目标是在保持目录结构的同时将表的数据复制到Amazon S3中。如果我尝试按以下方式将表内容直接写入S3文件,则输出将作为单个文件写入,并且目录结构丢失:

INSERT OVERWRITE DIRECTORY "s3://<DESTINATION>" SELECT * FROM T1;

或者,如果我尝试使用命令将目录从HIVE-metatore直接复制到s3,则该目录将全部复制到S3,但是基础文件不再以逗号分隔...这是一些不可读的字符代替:

s3-dist-cp --src=hdfs://<directory location> --dest=s3://<destination>

有人可以帮我实现这一目标吗?有什么建议或选择吗?

1 个答案:

答案 0 :(得分:1)

可能的解决方案是创建具有相同架构的表并将位置设置为所需位置,然后使用Hive和动态分区加载数据:

create table T2 like T1;

Alter table T2 set location = 'your destination location';

set hive.exec.dynamic.partition=true; 
set hive.exec.dynamic.partition.mode=nonstrict;

Insert overwrite table T2 partition (dt)
select * from T1
distribute by dt;