3

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

4

2 回答 2

14

考虑为此使用 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 并执行将数据存储在 S3 中的 SQL 查询。选项 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

于 2017-11-15T22:09:32.823 回答
1

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

  1. 从 AWS 控制台转到“数据管道”
  2. 点击页面右上角的“新建管道”
  3. 编辑此 json 文件中的每个字段(在复制到您喜欢的编辑器之后)并使用与您的 AWS 环境相关的正确值更新具有“$NEED_TO_UPDATE_THIS_WITH_YOURS”的字段,并将其保存为 data_pipeline_template.json 在您计算机上的某个位置
  4. 再次返回 AWS 控制台,单击源字段的“加载本地文件”并上传 json 文件

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

  1. 从 AWS 控制台转到“数据管道”
  2. 点击页面右上角的“新建管道”
  3. 手动填充所有字段(见下文) 在此处输入图像描述
  4. 点击页面底部的“在 Architect 中编辑”
  5. 实现与以下相同的活动和资源,再次确保添加正确的值,例如数据库 JDBC 连接等

在此处输入图像描述

于 2020-04-04T00:51:41.447 回答