Airflow 根据dag文件定义代码每日/定期更新气流dag

Airflow 根据dag文件定义代码每日/定期更新气流dag,airflow,Airflow,是否有方法根据dag文件定义代码每天/定期更新气流dag?例如,更新dag定义中可能使用的日期值 对于上下文:我有一个dag,它每天从远程数据库获取新的表行,并将它们移动到本地数据库中。为了从远程获取最新的行,我们有一个从本地获取最新日期的函数。当前有一个dag定义为 。。。 def获取最新日期(表名): #从本地表获取最新的导入日期 .... 对于表中的表:#类型列表(dict) task_1=bash运算符( task\u id='task\u 1\u%s'%table[“tablename

是否有方法根据dag文件定义代码每天/定期更新气流dag?例如,更新dag定义中可能使用的日期值

对于上下文:我有一个dag,它每天从远程数据库获取新的表行,并将它们移动到本地数据库中。为了从远程获取最新的行,我们有一个从本地获取最新日期的函数。当前有一个dag定义为

。。。
def获取最新日期(表名):
#从本地表获取最新的导入日期
....
对于表中的表:#类型列表(dict)
task_1=bash运算符(
task\u id='task\u 1\u%s'%table[“tablename”],
bash_command='bash%s/task_1.sh%s'(项目主页,表[“最新日期]),
执行超时=时间增量(分钟=30),
dag=dag)
task_2=bash运算符(
task_id='task_2'%s'%table[“tablename”],
bash_command='bash%s/task_2.sh'%PROJECT\u HOME,
执行超时=时间增量(分钟=30),
dag=dag)
任务1>>任务2

where tables是DICT,其中它们的一个字段在代码的前面构造为给定表的最新日期的字符串代表。在task_1.sh脚本中打印假定的最新日期时,发现该日期没有每天更新。需要一种每天重新构建表列表的方法,以获得正确的日期值。

使用以下代码,您可以从本地数据库中为每个表动态提取
最新的\u日期
,并在
操作符中使用

来自气流导入DAG
输入气流
从airflow.operators.dummy_operator导入dummy operator
从afflow.operators.python_operator导入ShortCircuitOperator
从afflow.operators.bash_operator导入bash operator
导入日志记录
从datetime导入datetime,timedelta
args={
“所有者”:“气流”,
“开始日期”:气流.utils.dates.days(2),
}
dag=dag(
dag_id='example_dag',
默认值_args=args,
计划时间间隔=无,
)
def获取最新日期(**kwargs):
#从本地表获取最新的导入日期
logging.info(“表名:{0}.”格式(kwargs['Table_Name']))
#下面我做一个datetime.today()演示。在您的函数中,从本地数据库获取最新日期将是您的实际逻辑
最新日期=(datetime.today()-timedelta(days=kwargs['date\u diff'])).strftime(“%d-%m-%Y”)
logging.info(“最新日期:{0}”。格式(最新日期))
#将最新日期添加到任务xcom
kwargs['ti'].xcom\u push(key='latest\u date',value=latest\u date)
返回最晚日期
启动任务=DummyOperator(任务id='启动任务',dag=dag)
结束任务=DummyOperator(任务id='结束任务',dag=dag)
#下表不再需要在每个表字典中输入最新的\u日期
tables_list=[{'tablename':'table1'},{'tablename':'table2'},{'tablename':'table3'},{'tablename':'table4'}]
#下面我使用idx(索引)表示日期差异。我正在进行日期差异,以获取不同任务的最新日期值。这只是为了演示
对于idx,枚举中的表(表列表):#类型列表(dict)
获取最新日期任务=短路运算符(
task_id='Get_Latest_Date_In_Table_{0}.格式(Table['tablename']),
提供上下文=True,
python\u callable=获取最新日期,
奥普·夸格斯={
“table_name”:表['tablename'],
“日期差异”:idx
},
dag=dag)
#您可以像下面这样创建一个变量xcom_str,并在bash操作符bash_命令中使用该变量,也可以直接将其嵌入bash_命令中(就像我在task_2 bash操作符中所做的那样)
xcom_str=“{ti.xcom_pull(task_ids='Get_Latest_Date_In_Table{}',key='Latest_Date')}.”格式(Table['tablename']))
task_1=bash运算符(
task_id='task_1{0}'。格式(table['tablename']),
bash_command='echo'{'+xcom_str+'}',
执行超时=时间增量(分钟=30),
dag=dag)
task_2=bash运算符(
task_id='task_2{0}'。格式(table['tablename']),
bash_command='echo'{{ti.xcom_pull(“在{u Table}+Table['tablename']+'”,key=“Latest_Date”)}},
执行超时=时间增量(分钟=30),
dag=dag)
开始任务>>获取最新任务日期>>任务1>>任务2>>结束任务
与以下内容有些关联: