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



我一直按照微软提供的步骤使用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个

谢谢你的帮助。

我觉得代码和文档看起来很好,检查需要传递给pipelinterreference的参数

同样,Python将一个名为"self"的参数传递给对象中的每个方法。"self"类似于JavaScript中的"this"。self参数存储对象中值的信息。

当您尝试通过类中的方法传递参数而不同时指定" self "作为参数时,会引发" takes 1 positional argument but two were given "错误。

可以通过将" self "作为参数添加到类中的所有方法中来解决此错误。(在你的情况下Init)

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

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

此外,数据工厂SDK(截至这篇文章)用begin_start替换了start函数,如下所示:

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

问题源于init函数。例如,在PipelineReference的init函数中,你会注意到参数是(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

Per the docs:

" * "或" *identifier "后面的形参是仅限关键字形参,只能通过关键字实参传递。

TriggerPipelineReference的init函数遵循类似的方法,只是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

最新更新