2013-07-19 52 views
4

我有一个压缩的s3文件。我想将它插入到RedShift数据库中。我的研究发现这样做的唯一方法是启动一个ec2实例。将文件移到那里,解压缩,然后发回S3。然后将其插入到我的RedShift表中。但我试图从外部机器的JavaSDK完成这一切,并且不想使用Ec2实例。有没有办法让EMR作业解压文件?或者将压缩文件直接插入RedShift?将压缩文件插入RedShift

文件的.zip文件不.GZIP

+2

红移支持GZIP作为压缩输入(低级S3成本和更快的加载时间)的方式。在COPY命令中使用GZIP标志。 – Guy

+0

在一种情况下,文件被压缩(超出我的控制范围)而不是gziped是否有压缩选项? –

+0

据我所知,尚未。您需要将其上传和gzip。您可以使用Java来做到这一点,并使用正确的压缩方式将其返回到S3。 – Guy

回答

9

您不能直接插入一个压缩文件到红移按Guy的评论。

假设这不是1次任务,我建议使用AWS Data Pipeline来执行此项工作。 See this example of copy data between S3 buckets.修改示例以解压缩,然后gzip数据而不是简单地复制它。使用ShellCommandActivity来执行一个执行工作的shell脚本。如果您选择适当的AMI作为您的EC2资源(YMMV),我会假定此脚本可以调用Java。

数据管道对于此类工作非常有效,因为它会自动启动和终止EC2资源,并且您不必担心在脚本中发现新实例的名称。

-2

如果你的文件是gzip的请尝试以下命令从“S3

副本可变:// ABC/DEF/yourfilename.gz 'CREDENTIALS 'aws_access_key_id = XXXXX; aws_secret_access_key = YYYYYY' 分隔符',” gzip的

+1

我特别说过,我的文件不是GZIP,但是在ZIP中 –