如何在Airflow中的SimpleHttpOperator中访问execution_date

时间:2016-11-01 04:32:36

标签: rest jinja2 airflow databricks

我正在尝试使用带有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中访问它的方法,请告诉我。

感谢。

1 个答案:

答案 0 :(得分: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
)