【问题标题】:How to purge historical data when clearing a run from Airflow dashboard?从 Airflow 仪表板清除运行时如何清除历史数据?
【发布时间】:2021-09-22 19:16:53
【问题描述】:

这是一个典型的请求:

我构建了一个 DAG,它从 2020-01-01 开始每天更新。它使用 {execution_date} 作为参数运行INSERT SQL 查询。现在我需要更新查询并重新运行过去 6 个月。

我发现我必须手动暂停 Airflow 进程,DELETE 历史数据,INSERT 然后重新激活 Airflow 进程,因为当我清除时 Airflow 追赶不会删除历史数据> 跑步。

我想知道是否可以编写 clear 部分的脚本,以便每次单击运行时,从 UI 中清除它,Airflow 在后台运行一个清除脚本?

【问题讨论】:

  • 实际上,我们最近也有过同样的讨论,如果将其添加为 UI 功能以运行类似的模式会更好。你可以看看这个讨论,也许你可以插话:github.com/apache/airflow/discussions/18428

标签: python airflow


【解决方案1】:

经过一番思考,我认为这是一个可行的解决方案:

不要在 DAG 中插入数据,而是先使用 DELETE 查询,然后再使用 INSERT 查询。

例如,如果我想插入 {execution_date} - 1(昨天),而不是创建只运行 INSERT 查询的 DAG,我应该首先运行删除昨天数据的 DELETE 查询,然后插入数据。

通过使用这种 DELETE-INSERT 方法,我的两个场景都会自动运行:

  • 如果只是正常运行(即尚未插入昨天的数据,这是 {execution_date} 的此 DAG 的第一次运行),则 DELETE 部分不执行任何操作,INSERT 会正确插入数据。

  • 如果重新运行,DELETE部分会清除已经插入的数据,INSERT会根据更新后的脚本插入数据。不会创建重复项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多