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