如何在 Apache Airflow 中重命名 DAG

vce*_*ick 5 airflow

过去几天,我一直在评估 Airflow 作为我们 ETL 工作流程的可能替代工具,并发现在 Airflow 中重命名 DAG 时出现了一些有趣的行为。

如果我在名为hello_world.py的文件中有一个 dag

dag = DAG('hello_world', description='Simple DAG',
          schedule_interval='0 12 * * *',
          start_date=datetime(2017, 11, 1), catchup=True)
Run Code Online (Sandbox Code Playgroud)

这个 dag 已经在 11 月执行了 10 天,然后我决定我只想将 dag 的名称更改为“yet_another_hello_world”,例如在同一个文件hello_world.py 中

dag = DAG('yet_another_hello_world', description='Simple DAG',
          schedule_interval='0 12 * * *',
          start_date=datetime(2017, 11, 1), catchup=True)
Run Code Online (Sandbox Code Playgroud)

我只是对作业进行重命名,而不是更改业务逻辑等。当它部署到 Airflow 中时,它会被自动选取并注册为新作业,因此现在在 DAG 视图中可以看到 2 个作业

  • 你好,世界
  • Yet_another_hello_world

由于 DAG 定义中的catchup=True,调度程序会自动看到此更改并注册一个新作业Yet_another_hello_world,然后它会继续回填从 11 月 1 日起丢失的执行。它还继续保持现有的hello_world作业完好无损。

最终,我希望这是对现有作业的重命名,而不是保留旧的 hello_world 作业。有没有办法向气流表明这是一个简单的重命名?

sdi*_*kby 5

作为最佳实践,当您想要更改 dag 的名称、schedule_interval 或 start_date 时,始终建议创建一个新的 dag 文件。

  • 感谢您的回复,创建一个新文件并最终创建新的作业 ID 将保证我会丢失上一个作业的作业执行历史。如果可能的话,我想在新工作名称上保留该历史记录 (3认同)
  • 您只需要更改 dag id,而不是作业的 id。对于特定 DAG 的历史记录,您可以从气流元数据库中使用新的 dag_id 更改旧的 dag_id (3认同)