调度从AWS Redshift到S3的数据提取

Spa*_*ner 3 amazon-s3 amazon-web-services amazon-redshift aws-glue

我正在尝试构建一个从Redshift中提取数据的工作,并将相同的数据写入S3存储桶.直到现在我已经探索了AWS Glue,但是Glue无法在redshift上运行自定义sql.我知道我们可以运行卸载命令,可以直接存储到S3.我正在寻找可以在AWS中进行参数化和调度的解决方案.

Paw*_*wel 11

考虑使用AWS Data Pipeline.

AWS Data Pipeline是AWS服务,允许您定义和计划常规作业.这些作业称为管道.Pipeline包含所需工作的业务逻辑,例如,将数据从Redshift提取到S3.您可以安排管道运行,但通常需要例如每天运行.

管道由您定义,您甚至可以对其进行版本控制.您可以使用Data Pipeline Architect在浏览器中准备管道定义,也可以在计算机上本地使用JSON文件进行组合.管道定义由组件组成,例如Redshift数据库,S3节点,SQL活动以及参数,例如指定用于提取数据的S3路径.

AWS Data Pipeline服务处理管道中组件之间的调度,依赖关系,监视和错误处理.

对于您的具体用例,我会考虑以下选项:

选项1

使用以下组件定义管道:SQLDataNode和S3DataNode.SQLDataNode将引用您的Redshift数据库和SELECT查询以用于提取数据.S3DataNode将指向用于存储数据的S3路径.您添加CopyActivity活动以将数据从SQLDataNode复制到S3DataNode.当这样的管道运行时,它将使用SQLDataNode从Redshift检索数据,并使用CopyActivity将该数据复制到S3DataNode.S3DataNode中的S3路径可以参数化,因此每次运行管道时它都不同.

选项2

首先,使用UNLOAD语句定义SQL查询,以用于将数据卸载到S3.(可选)您可以将其保存在文件中并上传到S3.使用SQLActivity组件指定要在Redshift数据库中执行的SQL查询.SQLActivity中的SQL查询可以是对存储查询(可选)的S3路径的引用,也可以是查询本身.每当管道运行时,它将连接到Redshift并执行SQL查询,该查询将数据存储在S3中.选项2的约束:在UNLOAD语句中,S3路径是静态的.如果您计划将每个数据提取存储在单独的S3路径中,则每次运行时都必须修改UNLOAD语句以使用另一个S3路径,这不是开箱即用的功能.

这些管道在哪里运行?

在带有TaskRunner的EC2实例上,这是AWS提供的用于运行数据管道的工具.您可以在管道运行时自动启动该实例,也可以在安装了TaskRunner的情况下引用已运行的实例.您必须确保允许EC2实例连接到Redshift数据库.

相关文件:

http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/what-is-datapipeline.html

http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-object-redshiftdatabase.html

http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-object-sqldatanode.html

http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-object-sqlactivity.html

http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html