0

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

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

4

2 回答 2

1

我想我可以与这个用例联系起来。无论如何,Data Pipeline 不会自己进行这种依赖管理。但是,可以使用文件前提条件对其进行模拟。

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

另一种解决方案是使用Simple Workflow 产品。这具有您正在寻找的功能 - 但需要使用Flow SDK进行自定义编码。

于 2015-04-15T09:53:10.200 回答
1

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

有两个数据集:

  1. 产品
  2. 销售量

加载这些数据集的步骤

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

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

条件:需要在“销售”运行之前加载“产品”

  • 添加dependsOn关系。在引用 Product 的 ShellCommandActivity 的 Sales 的 ShellCommandActivity 上添加此字段。请参阅文档中的 dependsOn 字段。它说:“在此活动开始之前必须达到 FINISHED 状态的其他活动的一个或多个引用”。

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

于 2015-04-17T19:20:48.857 回答