繁体   English   中英

Azure 数据工厂触发器创建使用 python

[英]Azure data factory trigger creation using python

我一直按照 Microsoft 提供的步骤使用 python SDK 创建 ADF 触发器,但它不起作用。

https://learn.microsoft.com/en-us/azure/data-factory/how-to-create-schedule-trigger?tabs=data-factory#python-sdk

# Create a trigger
    tr_name = 'mytrigger'
    scheduler_recurrence = ScheduleTriggerRecurrence(frequency='Minute', interval='15',start_time='2017-12-12T04:00:00Z', end_time='2017-12-12T05:00:00Z', time_zone='UTC')
    pipeline_parameters = {'inputPath':'adftutorial/input', 'outputPath':'adftutorial/output'}
    pipelines_to_run = []
    pipeline_reference = PipelineReference('copyPipeline')
    pipelines_to_run.append(TriggerPipelineReference(pipeline_reference, pipeline_parameters))
    tr_properties = ScheduleTrigger(description='My scheduler trigger', pipelines = pipelines_to_run, recurrence=scheduler_recurrence)    
    adf_client.triggers.create_or_update(rg_name, df_name, tr_name, tr_properties)

    # Start the trigger
    adf_client.triggers.start(rg_name, df_name, tr_name)

它抛出以下错误。 我错过了什么?

pipeline_reference = PipelineReference('copyPipeline') TypeError: init () 采用 1 个位置参数,但给出了 2 个

谢谢你的帮助。

我觉得代码和文档看起来不错,检查需要为PipelineReference传递的参数

此外,Python 将一个名为“self”的参数传递给 object 中的每个方法。“self”类似于 JavaScript 中的“this”。“self”参数存储有关 object 中的值的信息。

当您尝试通过 class 中的方法传递参数而不指定“self”作为参数时,会引发“采用 1 个位置参数但给出 2 个”错误。

您通过将“self”作为参数添加到 class 中的所有方法来解决此错误。(在您的情况下为 Init)

我有同样的错误,并通过对 PipelineResource 和 TriggerPipelineReference 使用关键字 arguments 修复它,如下所示:

pipeline_reference = PipelineReference(reference_name='copyPipeline')
pipelines_to_run.append(TriggerPipelineReference(pipeline_reference=pipeline_reference, pipeline_parameters))

此外,数据工厂 SDK(截至发帖时)用 begin_start 替换了 start function,如下所示:

adf_client.triggers.begin_start(rg_name, df_name, tr_name)

问题源于 init function。例如,在 PipelineReference 的 init function 中,您会注意到 arguments 是 (self, *, reference_name: str, name: Optional[str] = None, **kwargs)

def __init__(
    self,
    *,
    reference_name: str,
    name: Optional[str] = None,
    **kwargs
):
    """
    :keyword reference_name: Required. Reference pipeline name.
    :paramtype reference_name: str
    :keyword name: Reference name.
    :paramtype name: str
    """
    super(PipelineReference, self).__init__(**kwargs)
    self.reference_name = reference_name
    self.name = name

根据文档

“*”或“*identifier”之后的参数是关键字参数,只能通过关键字arguments传递。

TriggerPipelineReference 的 init function 遵循类似的方法,除了 pipeline_reference 被明确定义为默认值为 None 的关键字参数。

def __init__(
    self,
    *,
    pipeline_reference: Optional["PipelineReference"] = None,
    parameters: Optional[Dict[str, Any]] = None,
    **kwargs
):
    """
    :keyword pipeline_reference: Pipeline reference.
    :paramtype pipeline_reference: ~azure.mgmt.datafactory.models.PipelineReference
    :keyword parameters: Pipeline parameters.
    :paramtype parameters: dict[str, any]
    """
    super(TriggerPipelineReference, self).__init__(**kwargs)
    self.pipeline_reference = pipeline_reference
    self.parameters = parameters

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM