我正在使用气流编排etl流程,并且我完成了以下任务:
for sql_file in sql_files:
t1 = PythonOperator(
task_id= sql_file + '_run',
provide_context=True,
python_callable=run_sql_from_file,
op_kwargs={'filename': sql_file + '.sql',
'connection': connection,
'logger': logger
},
trigger_rule='all_done',
dag=dag)
所有sql文件都具有相同的结构,并且是此脚本的变体:
delete from databaseY.tableX;
insert into databaseY.tableX
select *
from databaseZ.tableW as bs
inner join databaseW.tableY as cd on bs.id_camp = cd.id_camp
首先删除数据表的记录,然后插入新记录。
当我从气流障碍物运行此任务时,我没有任何错误,实际上Airflow告诉我所有任务都已成功运行。不幸的是,当dag完成时,某些数据表为空。我认为这是因为任务从数据表中删除了数据,但从未完成插入新数据。我认为气流会超时,但是我不知道在哪里可以确保不会发生这种情况。
问题:我该如何解决此问题?
答案 0 :(得分:0)
您是否以异步或同步方式运行此python函数,或在run_sql_from_file中检查db操作状态?如果您以异步方式运行它,则它可能不会返回状态。在这种情况下,我总是写操作符来检查数据库操作状态。