【问题标题】:Airflow get/set a parameter on BashOperatorAirflow 在 BashOperator 上获取/设置参数
【发布时间】:2020-11-20 11:22:13
【问题描述】:

我正在尝试将一个值设置为参数,然后在 bashOperations 上使用它。它失败了,因为我不知道如何使用 task_instance.xcom_pull。请帮我获取/设置 bash 字符串中的参数。

dag = DAG(
    dag_id = 'stackover',
    schedule_interval='01 6 * * *',
    default_args=default_args,
    description='stackover',
    tags=['stackover'],
    catchup=False
)

week_op = BashOperator(
    task_id="week_op",
    bash_command='echo "{{ params.week }}"',
    params = {'week' : ' $(date +%V -d \"1 week ago\") ',},
    provide_context=True,
    xcom_push=True,
    dag=dag
)


start_op = BashOperator(
    task_id="start_op",
    bash_command=' {{ params.query }}"',
    params = {'query' : 'echo {{ (task_instance.xcom_pull(task_ids=\'week_op\')) }} ',},
    provide_context=True,
    xcom_push=True,
    dag=dag
)

week_op >> start_op

提前致谢

【问题讨论】:

    标签: python bash airflow


    【解决方案1】:

    你可以直接在bash_command中使用Jinja作为:

    start_op = BashOperator(
        task_id="start_op",
        bash_command=' echo {{ ti.xcom_pull("week_op") }}',
        provide_context=True,
        xcom_push=True,
        dag=dag
    )
    

    【讨论】:

    • 所以我不能在参数上使用 Jinja 吗?有没有办法在参数上使用它?还是同时使用 params 和 Jinja ?
    • params 不是模板化参数。所以你不能那样做。我不确定你为什么需要这个。但是,如果您真的必须拥有它,您可以创建从 BaseOpertor 继承的自定义运算符,并将 params 参数添加到 template_fields 列表中
    • 有没有办法防止 Jinja 在前面留下空间?我无法得到 echo46,只有 echo 46
    • 我相信您应该可以使用 Jinja 设置进行设置。你可以通过 DAG 的 jinja_environment_kwargs 参数来控制它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2022-10-31
    • 2018-11-20
    • 1970-01-01
    相关资源
    最近更新 更多