代码之家  ›  专栏  ›  技术社区  ›  matsev

AWS胶水中的可选作业参数?

  •  0
  • matsev  · 技术社区  · 6 年前

    如何实现AWS粘合作业的可选参数?

    我已经创建了一个作业,当前有一个字符串参数(一个ISO 8601日期字符串)作为ETL作业中使用的输入。我希望将此参数设置为可选,以便作业在未提供时使用默认值(例如使用 datetime.now datetime.isoformat 在我的情况下)。我试过用 getResolvedOptions :

    import sys
    from awsglue.utils import getResolvedOptions
    
    args = getResolvedOptions(sys.argv, ['ISO_8601_STRING'])
    

    但是,当我没有通过 --ISO_8601_STRING 作业参数我看到以下错误:

    awsglue.utils.glueArgumentError:参数--需要iso__字符串

    4 回复  |  直到 6 年前
        1
  •  2
  •   Yuriy Bondaruk    6 年前

    有一个变通方法可以使用可选参数。其思想是在解决参数之前检查它们(scala):

    val argName = 'ISO_8601_STRING'
    var argValue = null
    if (sysArgs.contains(s"--$argName"))
       argValue = GlueArgParser.getResolvedOptions(sysArgs, Array(argName))(argName)
    
        2
  •  1
  •   dougstar    6 年前

    我看不出有可选参数的方法,但是您可以在作业本身上指定默认参数,然后如果在运行作业时不传递该参数,则作业将收到默认值(请注意,默认值不能为空)。

        3
  •  1
  •   Hakan Ä°lter    6 年前

    如果您使用的是接口,那么您必须提供以“—”like“—”table\u name开头的参数名,而不是以“table\u name”开头的参数名,然后您可以像下面的(python)代码那样使用它们:

    args = getResolvedOptions(sys.argv, ['JOB_NAME', 'TABLE_NAME'])
    table_name = args['TABLE_NAME']
    
        4
  •  0
  •   matsev    6 年前

    移植 Yuriy's answer 要让python解决我的问题:

    if ('--{}'.format('ISO_8601_STRING') in sys.argv):
        args = getResolvedOptions(sys.argv, ['ISO_8601_STRING'])
    else:
        args = {'ISO_8601_STRING': datetime.datetime.now().isoformat()}