气流 - 回填的不同计划间隔

Mar*_*k M 9 python airflow

处理回填和持续运行的不同计划间隔的最佳方法是什么?

对于回填,我想使用每日间隔,但对于持续运行,我想使用每小时间隔。

我可以想到三种方法:

  1. 我看到的最简单的方法是在一个 .py 文件中定义两个 DAG。dag_backfill以每天为间隔,过去的开始日期和结束日期为datetime.now()dag_ongoing每小时间隔和开始日期为datetime.now(),在dag_backfill完成时接管。但是,这里不鼓励在一个文件中使用两个 DAG :

    我们确实支持每个 python 文件多个 DAG 定义,但不建议这样做,因为我们希望从故障和部署角度更好地隔离 DAG...

  2. 两个 .py 文件导入构成管道的相同 python 函数。我担心在这种方法中保持单独的文件一致。

  3. 只有一个每小时间隔的 DAG 检查运行日期是否超过过去 1 天,如果是,则仅在这些日期的午夜运行。我觉得这是不雅的,因为它会模糊回填将运行的时间表,至少从 gui 主页。

这个或已知的最佳实践有共同的模式吗?

小智 0

在您的三个选项中,其中 2 个或 3 个是完全可以接受的。

在我们的 ETL 计划中,我们每天运行增量提取,然后在周末刷新。我们在两个不同的计划中使用两个独立的 DAG。它们调用相同的代码,只是使用不同的参数,因此底层代码始终是一致的。只需确保 DAG 的名称彼此相似,例如dag_import_xyz_hourlydag_import_xyz_daily