使用AWS Glue Job触发器启动具有不同参数的作业

时间:2018-03-12 17:32:28

标签: amazon-web-services amazon-s3 aws-sdk etl aws-glue

我正在使用AWS Glue ETL脚本和触发器在s3中对数据运行许多作业。我已经写了总共四个作业,这些作业将根据我们想要运行作业的数据来获取特定参数。我们希望能够为每个作业共享脚本,并为我们想要运行的特定作业传递不同的参数(即作业A将为不同的作业提供两组不同的参数 - data1和data2。我们在具有data1成功的作业-A之后设置触发器以使用data1启动作业-B,并且在作业-A之后使用data2以数据2成功启动作业-B的单独触发器。

然而,查看作业触发器,我们可以创建触发器,以便在上一个作业成功时启动作业(即,当参数data1传入的作业-A成功时,使用参数data1触发作业-B;当作业-A带参数时data2传入成功,用参数data2)触发job-B,但因为我们共享代码,不管传入的参数(data1 v.data2)如何,如果带有data1参数的jobA成功,因为job-B配置为在作业A成功运行时,作业B的两个实例将被启动 - 一个带参数data1,另一个带参数data2。

理想情况下,我们希望触发器只使用匹配的参数集启动作业,这样我们就可以共享胶水ETL作业脚本,只将参数传递给触发器。

有没有办法在不创建不同版本的脚本的情况下实现这样的目标?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,目前恐怕唯一的解决方案是在其他作业结束时手动触发该作业(例如使用boto3)

import boto3 

[...]

client = boto3.client('glue', 'us-east-1')
if data1:
    client.start_job_run(
            JobName='job-A',
            Arguments={
                '--data': data1)
elif data2:
    client.start_job_run(
            JobName='job-B',
            Arguments={
                '--data': data2)