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

时间:2015-04-14 22:29:00

标签: batch-processing scheduler etl amazon-data-pipeline

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

我的问题是:想象我们有两个数据集要加载 - 产品和销售。每个数据集都需要加载许多步骤(获取源数据,调用python脚本进行转换,加载到Redshift)。但是,产品需要在 销售之前加载,因为我们需要产品成本等来计算保证金。是否有可能拥有一个" master"数据管道中的管道,它首先调用产品,等待它成功完成,然后调用销售?如果是这样,怎么样?如果数据管道不适合这种类型的工作流程,我也可以接受其他产品建议。感谢帮助

2 个答案:

答案 0 :(得分:1)

我想我可以与这个用例有关。不管怎么说,Data Pipeline都不会自己做这种依赖管理。然而,它可以使用文件前置条件进行模拟。

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

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

答案 1 :(得分:1)

这是datapipeline的基本用例,绝对可以。您可以使用其图形管道编辑器来创建此管道。打破问题:

有两个数据集:

  1. 产品
  2. 销售
  3. 加载这些数据集的步骤

    1. 获取源数据:从S3说。为此,请使用S3DataNode
    2. 调用python脚本进行转换:将ShellCommandActivity与staging一起使用。 Data Pipeline为附加到ShellCommandActivity的S3DataNode隐式执行数据分段。您可以使用提供的特殊env变量来使用它们:Details
    3. 将输出加载到Redshift :使用RedshiftDatabase
    4. 您需要为需要使用的每个数据集添加上述组件(在本例中为产品和销售)。为便于管理,您可以在EC2 Instance上运行这些内容。

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

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

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