我在s3中有一个压缩文件。我想将其插入RedShift数据库。我的研究发现这样做的唯一方法是启动ec2实例。将文件移动到那里,解压缩并将其发送回S3。然后将其插入我的RedShift表。但我试图从外部机器上从JavaSDK完成这一切,并且不想使用Ec2实例。有没有办法让EMR作业解压缩文件?或者将压缩文件直接插入RedShift?
文件是.zip而不是.gzip
答案 0 :(得分:10)
根据Guy的评论,您无法直接将压缩文件插入Redshift。
假设这不是一次性任务,我建议使用AWS Data Pipeline来执行此项工作。 See this example of copy data between S3 buckets.修改示例以解压缩然后gzip您的数据,而不是简单地复制它。
使用ShellCommandActivity
执行执行工作的shell脚本。如果您选择并将AMI作为您的EC2资源(YMMV),我会假设此脚本可以调用Java。
Data Pipeline对于此类工作非常有效,因为它会自动启动和终止EC2资源,而且您不必担心在脚本中发现新实例的名称。
答案 1 :(得分:2)
添加gzip
选项,请参阅:http://docs.aws.amazon.com/redshift/latest/dg/c_loading-encrypted-files.html
我们可以使用Java客户端来执行SQL
答案 2 :(得分:-2)
如果您的文件是gzip,请尝试以下命令
从's3:// abc/def/yourfilename.gz'复制mutable; CREDENTIALS' aws_access_key_id = xxxxx; aws_secret_access_key = yyyyyy'分隔符','的 gzip的强>