当我第一次使用Airflow构建ETL数据管道时,在弄清为什么管道无法运行之后,我经历了许多令人难忘的“啊哈”时刻。由于技术文档无法涵盖所有内容,因此我倾向于通过试错和阅读优秀的源代码来学习新工具。在本文中,我将分享Airflow的许多实用技巧和最佳实践,以帮助您建立更可靠和可扩展的数据管道。
DAG Schedule
在Airflow中,Airflow调度程序会根据DAG文件中指定的start_date
和schedule_interval
来运行DAG,对于初学者来说,很容易被Airflow的工作计划机制弄糊涂,因为Airflow计划程序在计划时间段的末尾而不是开始时触发DAG运行是不直观的。
调度程序根据start_date
和schedule_interval
计算执行时间,并在满足其时间依赖性时触发DAG。例如,考虑以下示例DAG,该DAG每天在世界标准时间上午7点运行:
default_args = {
'owner': 'xinran.waibel',
'start_date': datetime(2019, 12, 5),
}
dag = DAG('sample_dag', default_args=default_args, schedule_interval='0 7 * * *')
这个DAG的具体运行时间如下图所示:
DAG的第一次运行将在其计划周期结束时(而不是在开始日期)于2019-12-06的上午7点之后触发。同样,其余的DAG运行将在每天早上7点之后执行。
Airflow中的execution_date
不是实际的运行时间,而是其计划周期的开始时间戳。例如,第一次DAG运行的execution_date
为2019–12–05 07:00:00,尽管它是在2019–12–06上执行的。但是,如果用户手动启动DAG运行,则此手动DAG运行的执行时间将恰好是触发