说我在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>
有人可以帮我实现这一目标吗?有什么建议或选择吗?
答案 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;