2

我正在尝试使用带有 SimpleHttpOperator的REST API自动进行调用。

这是我可以拨打的电话示例,并且效果很好。

curl -u username:password 
    -H "Content-Type: application/json" 
    -X POST 
    -d '{"job_id":10,"date":{"year":"2016","month":"10"}}' 
    https://MY_INSTANCE_NAME.cloud.databricks.com/api/2.0/jobs/run-now

现在,将其格式化为由 SimpleHttpOperator 生成,看起来像这样,而且效果很好:

t2 = SimpleHttpOperator(
    task_id=TASK_ID,
    http_conn_id=CONN_ID,
    method='POST',
    endpoint='api/2.0/jobs/run-now',
    headers={"Content-Type": "application/json"},
    data=json.dumps({"job_id":10, "date": { "year": "2016" , "month": "10" }}),
    dag=dag
    )

我现在正在尝试访问 execution_date,这是一个由 Airflow 设置的变量,它让操作员知道它应该被调用的时间。这通常可以使用 BashOperator 或 PythonOperator 的 jinga 模板访问,但不能使用 SimpleHttpOperator:

e.g. """echo {{execution_date}}"""

这个变量对 SimpleHttpOperator 不可用,它是非常需要的。如果您知道任何解决方法或在 SimpleHttpOperator 中访问它的方法,请告诉我。

谢谢。

4

1 回答 1

0

SimpleHttpOperator 中的日期字段接受 jinja 模板:

t2 = SimpleHttpOperator(
    task_id=TASK_ID,
    http_conn_id=CONN_ID,
    method='POST',
    endpoint='api/2.0/jobs/run-now',
    headers={"Content-Type": "application/json"},
    data="""{"job_id":"10", "date": { "year": {{code}}, "month": {{code}}{{'}}'}}""",
    dag=dag
)
于 2016-11-01T16:18:53.463 回答