Amazon web services 在维护表分区目录结构的同时,将数据从配置单元写入AmazonS3

Amazon web services 在维护表分区目录结构的同时,将数据从配置单元写入AmazonS3,amazon-web-services,hadoop,amazon-s3,hive,amazon-athena,Amazon Web Services,Hadoop,Amazon S3,Hive,Amazon Athena,假设我在配置单元中有一个名为T1的表。它由dt列进行分区,dt列是一个日期字段。在配置单元元存储中,目录结构有一个名为T1表的文件夹,每个日期在一个文件夹内有子目录 我的目标是将表的数据复制到AmazonS3中,同时维护目录结构。如果我尝试按如下方式将表内容直接写入S3文件,则输出将作为单个文件写入,目录结构将丢失: INSERT OVERWRITE DIRECTORY "s3://<DESTINATION>" SELECT * FROM T1; 插入覆盖目录“s3://”从T1中

假设我在配置单元中有一个名为T1的表。它由dt列进行分区,dt列是一个日期字段。在配置单元元存储中,目录结构有一个名为T1表的文件夹,每个日期在一个文件夹内有子目录

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

INSERT OVERWRITE DIRECTORY "s3://<DESTINATION>" SELECT * FROM T1;
插入覆盖目录“s3://”从T1中选择*;
或者,如果我尝试使用命令将目录从HIVE metatore直接复制到s3,则整个目录将复制到s3,但底层文件不再以逗号分隔。。。而是一些不可读的字符:

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

谁能帮我完成这个任务?有什么建议或选择吗

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

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;

另一种选择是直接将文件复制到S3中(而不是通过配置单元)。然后创建一个指向它的外部表。