气流告诉我dag已成功完成任务

时间:2018-10-15 09:57:55

标签: python-3.x airflow

我正在使用气流编排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完成时,某些数据表为空。我认为这是因为任务从数据表中删除了数据,但从未完成插入新数据。我认为气流会超时,但是我不知道在哪里可以确保不会发生这种情况。

问题:我该如何解决此问题?

1 个答案:

答案 0 :(得分:0)

您是否以异步或同步方式运行此python函数,或在run_sql_from_file中检查db操作状态?如果您以异步方式运行它,则它可能不会返回状态。在这种情况下,我总是写操作符来检查数据库操作状态。