Airflow调度程序开发

需求:外界传入参数,使得Airflow的调度程序将参数值带入至相关执行程序中执行。

程序代码:

from datetime import timedelta,datetime
from airflow.operators.python_operator import PythonOperator
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
import pendulum
local_tz = pendulum.timezone("Asia/Shanghai")

default_args = {
    'owner': 'Test',
    'start_date': datetime(2022,7,3, tzinfo=local_tz)
}
with DAG(
    'customer_sale_order',
    default_args=default_args,
    description='customer_sale_order',
    schedule_interval='10 8 * * *',
    tags=['customer_sale_order']
) as dag:
    def dateStart(ds, **kwargs):       #根据前端DAG页面获取date_start值
        try:
            if len(kwargs.items()) == 0:
                return ''
            else:
                return kwargs['dag_run'].conf['date_start']
        except Exception:
            return ''
            pass


    t_get_data = PythonOperator(      #task执行dateStart function获取到值
        task_id='dateStart',
        provide_context=True,
        python_callable=dateStart,
        dag=dag)
    t0 = BashOperator(
        task_id='check_dependency',
        bash_command='/data/app/airflow/dag/script/customer_sale_order/customer_sale_order_check_dependency.sh ',
        dag=dag
    )
    t1 = BashOperator(
        task_id='customer_sale_order',
        bash_command='/data/app/airflow/dag/script/customer_sale_order/customer_sale_order.sh ',
        dag=dag
    )
    t2 = BashOperator(
        task_id='update_end_time',
        bash_command='/data/app/airflow/dag/script/customer_sale_order/customer_sale_order_update_end_time.sh ',
        dag=dag
    )

    t_replace = BashOperator(      #将前端所获取值传入到后端shell脚本完成脚本内容替换
        task_id='replace',
        bash_command="/data/app/airflow/dag/script/customer_sale_order/replace.sh {{ task_instance.xcom_pull(task_ids='dateStart') }} ",
        dag=dag,
    )
    t_restore = BashOperator(
        task_id='restore',
        bash_command="/data/app/airflow/dag/script/customer_sale_order/restore.sh {{ task_instance.xcom_pull(task_ids='dateStart') }} ",
        dag=dag
    )
    t_get_data>>t_replace>> t0 >> t1 >> t2 >>t_restore

reliace.sh

if ["$1" = ""]
then
echo '参数为空' >> /data/app/airflow/dag/script/1.txt
else
echo $1 >> /data/app/airflow/dag/script/1.txt
sed -i "s/now()/toDate('12345678900987654321')/g" /data/app/airflow/dag/sql/customer_sale_order/*
sed -i "s/today()/toDate('12345678900987654321')/g" /data/app/airflow/dag/sql/customer_sale_order/*
sed -i "s/12345678900987654321/$1/g" /data/app/airflow/dag/sql/customer_sale_order/*
sed -i "s/now()/toDate('12345678900987654321')/g" /data/check_dependency/customer_sale_order/*
sed -i "s/today()/toDate('12345678900987654321')/g" /data/check_dependency/customer_sale_order/*
sed -i "s/12345678900987654321/$1/g" /data/check_dependency/customer_sale_order/*

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值