hadoop—在维护表分区目录结构的同时,将数据从hive写入AmazonS3

cidc1ykv  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(408)

假设我在Hive中有一个名为t1的表。它由dt列进行分区,dt列是一个日期字段。在hivemetastore中,目录结构有一个名为t1表的文件夹,每个日期有一个子目录。
我的目标是将表的数据复制到amazons3中,同时维护目录结构。如果我尝试按以下方式将表内容直接写入s3文件,则输出将作为单个文件写入,并且目录结构将丢失:

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

或者,如果我尝试使用命令将目录从hivemetastore直接复制到s3,则整个目录将复制到s3,但底层文件不再以逗号分隔。。。而是一些不可读的字符:

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

有人能帮我完成吗?有什么建议或选择吗?

wsewodh2

wsewodh21#

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

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;

相关问题