安排从 AWS Redshift 到 S3 的数据提取

Scheduling data extraction from AWS Redshift to S3

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

为此考虑使用 AWS Data Pipeline。

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

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

AWS Data Pipeline 服务处理调度、管道中组件之间的依赖性、监控和错误处理。

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

选项 1

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

选项 2

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

这些管道在哪里 运行?

在带有 TaskRunner 的 EC2 实例上,这是 AWS 为 运行 数据管道提供的工具。您可以在管道 运行s 时自动启动该实例,或者您可以引用已经安装了 TaskRunner 的 运行ning 实例。您必须确保允许 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

我认为 Pawel 已经正确回答了这个问题,我只是为想要实施此选项的任何人添加选项二的详细信息:

  1. 从 AWS 控制台
  2. 转到 "Data Pipeline"
  3. 点击页面右上角的"New Pipeline"
  4. 编辑 this json file 中的每个字段(复制到您喜欢的编辑器后)并使用与您的 AWS 环境相关的正确值更新具有“$NEED_TO_UPDATE_THIS_WITH_YOURS”的字段并将其另存为data_pipeline_template.json 您计算机上的某个位置
  5. 再次返回 AWS 控制台,单击 "Load Local File" 作为源字段并上传 json 文件

如果您无法上传它,因为您可能遇到与数据库实例等相关的错误,请按照以下步骤操作:

  1. 从 AWS 控制台
  2. 转到 "Data Pipeline"
  3. 点击页面右上角的"New Pipeline"
  4. 手动填充所有字段(见下文)
  5. 点击页面底部的"Edit in Architect"
  6. 实施与下面相同的活动和资源,再次确保您添加了正确的值,例如您的数据库 JDBC 连接等