所以我对Redshift的理解有限,这是我解决问题的计划......
我想获取查询的结果,并将它们用作EMR作业的输入。这是程序化的最佳方式。
目前我的EMR作业从S3获取一个平面文件作为输入,我使用Amazon Java SDK来设置此作业以及所有内容。
我应该将RedShift查询的输出写入S3,并将EMR作业指向那里,然后在EMR作业完成后删除该文件吗?
或者,RedShift和AWS SKD是否提供了一种更有效的方法来将查询从RedShift直接传输到EMR,从而切断了S3步骤?
由于
最近与Amazon Redshift团队的成员交谈时,他们表示正在解决此问题。
答案 0 :(得分:4)
这很简单 - 不需要Sqoop。在作业前面添加Cascading Lingual步骤,对S3执行Redshift UNLOAD
命令:
UNLOAD ('select_statement')
TO 's3://object_path_prefix'
[ WITH ] CREDENTIALS [AS] 'aws_access_credentials'
[ option [ ... ] ]
然后您可以直接在S3上处理导出,或者添加S3DistCp步骤以将数据首先导入HDFS。
这比添加Sqoop要高得多,而且维护起来要简单得多。