Removing Airflow's xcom variables isn't working with Operational Error : "Incorrect datetime value in 'execution_date' at row 1"

Removing Airflow's xcom variables isn't working with Operational Error : "Incorrect datetime value in 'execution_date' at row 1"

我遇到了一个奇怪的气流错误。我尝试在某个执行日期内删除任务的 Xcom 变量;为同一任务创建和使用 Xcom 变量的另一个实例。

我为什么要这样做?因为这个 Xcom 变量的值在白天会发生变化,有时我会注意到冲突,所以会使用第一个值,这会打乱我的工作流程。如果需要,我很乐意举例说明。

当我执行这个查询时:

SELECT * FROM xcom WHERE dag_id='datamart_integration.tracking_marketing' AND TASK_ID='find_file' AND execution_date LIKE '%2020-12-14%'

我得到 2 行数据。

id  key value   timestamp   execution_date  task_id dag_id
4969    return_value    b'["DTM_DATALAKE_TRACKING_MARKETING_20201214_20201214060143.zip"]'  2020-12-14 10:22:50.085745  2020-12-14 05:40:38 find_file   datamart_integration.tracking_marketing
5139    return_value    b'["DTM_DATALAKE_TRACKING_MARKETING_20201214_20201214060143.zip", "DTM_DATALAKE_TRACKING_MARKETING_20201214_20201214130326.zip"]'   2020-12-14 16:50:55.596651  2020-12-14 13:35:44 find_file   datamart_integration.tracking_marketing

但是当我执行这个查询时:

DELETE FROM xcom WHERE dag_id='datamart_integration.tracking_marketing' AND TASK_ID='find_file' AND execution_date LIKE '%2020-12-14%'

我明白了

Execution failed on sql 'DELETE FROM xcom WHERE dag_id='datamart_integration.tracking_marketing' AND TASK_ID='find_file' AND execution_date LIKE '%2020-12-14%'': (1292, "Incorrect datetime value: '%2020-12-14%' for column 'execution_date' at row 1")

但我认为真正的问题出现在我尝试这些查询时:

DELETE FROM xcom WHERE dag_id='datamart_integration.tracking_marketing' AND TASK_ID='find_file' AND execution_date BETWEEN '2020-12-14 00:00:00' AND '2020-12-14 23:59:59'

DELETE FROM xcom WHERE dag_id='datamart_integration.tracking_marketing' AND TASK_ID='find_file' AND execution_date LIKE '2020-12-14%'

我明白了

'NoneType' object is not iterable

No data

我在想,除非在某处以某种方式指定,否则气流数据库可能受到 deletion/insertion 的保护?但是这些错误会令人困惑。

airflow_db 由 MySQL 启动,我正在研究 composer。

我能够重现这个完全相同的错误,我假设你在 Airflow 的 UI.

中使用 Adhoc Queries from Data Profiling

虽然在 Airflow 文档中没有严格指定(至少我没有找到),但我认为 DML 语句不允许从那里 运行;如文档中所述:

The adhoc query UI allows for simple SQL interactions with the database connections registered in Airflow

我了解临时查询仅用于测试连接。这可能就是为什么 SELECT 语句工作正常,但 DELETE 语句即使查询正确也会抛出这些错误。

我可以确认 运行DAG 中的 DELETE 语句,无论是来自 MySqlOperator 还是通过 xcom 库,正如您在评论中提到的,工作正常。