从 Amazon Data Pipeline 中的管道调用管道

Call a pipeline from a pipeline in Amazon Data Pipeline

我的工作团队目前正在寻找一个相当昂贵的 ETL 工具的替代品,目前,我们将其用作美化的调度程序。我们使用自己的 python 代码改进了 ETL 工具提供的任何集成,所以我真的只需要它的调度能力。我们正在考虑的一个选项是 Data Pipeline,我目前正在试用它。

因此我的问题是:假设我们有两个数据集要加载 - 产品和销售。这些数据集中的每一个都需要多个步骤才能加载(获取源数据、调用 python 脚本进行转换、加载到 Redshift)。但是,产品需要在 之前 销售运行之前加载,因为我们需要产品成本等来计算利润。 Data Pipeline 中是否可以有一个 "master" 管道先调用产品,等待其成功完成,然后调用销售?如果是这样,如何?如果 Data Pipeline 不适合此类工作流,我也乐于接受其他产品建议。感谢帮助

我想我能理解这个用例。不管怎样,Data Pipeline 本身并不做这种依赖管理。然而,它可以使用文件前提条件进行模拟。

在此示例中,您的子管道可能取决于在开始之前存在的文件(作为先决条件)。主管道将根据在其活动中执行的某些逻辑创建触发器文件。子管道可能会创建其他触发器文件,这些文件将启动下游的后续管道。

另一个解决方案是使用 Simple Workflow product . That has the features you are looking for - but would need custom coding using the Flow SDK

这是数据管道的基本用例,应该绝对可行。您可以使用他们的图形管道编辑器来创建此管道。分解问题:

有两个数据集:

  1. 产品
  2. 销售额

加载这些数据集的步骤

  1. 获取源数据:从S3说起。为此,使用 S3DataNode
  2. 调用 python 脚本进行转换: 使用 ShellCommandActivity 进行暂存。 Data Pipeline 为附加到 ShellCommandActivity 的 S3DataNodes 隐式地进行数据暂存。您可以使用提供的特殊环境变量来使用它们:Details
  3. 将输出加载到 Redshift:使用 RedshiftDatabase

您需要为需要使用的每个数据集(在本例中为产品和销售)添加上述组件。为了便于管理,您可以 运行 这些 EC2 Instance

条件: 'product'需要在'sales'之前加载 运行s

  • 添加 dependsOn 关系。在 Sales 的 ShellCommandActivity 上添加此字段,引用 Product 的 ShellCommandActivity。请参阅 documentation 中的 dependsOn 字段。它说:'One or more references to other Activities that must reach the FINISHED state before this activity will start'.

提示:在大多数情况下,您不希望在前一天的执行仍处于活动状态时开始第二天的执行,即 运行。为避免这种情况,请使用“maxActiveInstances”字段并将其设置为“1”。