Столкнулся со странной ошибкой в воздушном потоке. Я пытаюсь удалить переменные 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%'
я получил
Не удалось выполнить sql 'УДАЛИТЬ ИЗ xcom, ГДЕ dag_id='datamart_integration.tracking_marketing' AND TASK_ID='find_file' AND execute_date LIKE '%2020-12-14%'': (1292, "Неверное значение даты и времени: '%2020-12- 14%" для столбца "execution_date" в строке 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 не является итерируемым
Нет данных
Я думаю, возможно, база данных воздушного потока защищена от удаления/вставки, если где-то не указано и как-то? Но тогда эти ошибки будут сбивать с толку.
Airflow_db запускается с помощью MySQL
, и я работаю над composer.
@Elad Хорошо, нет, решение execution_date = {{ds}}
будет преобразовано в execution_date=2020-12-14
, которое ничего не возвращает для оператора SELECT
и 'NoneType' object is not iterable
для оператора DELETE
Что ж, я попробовал второе решение, пройдя библиотеку Xcom программно, и, похоже, оно работает.
Мне удалось воспроизвести ту же самую ошибку, я предполагаю, что вы использовали Специальные запросы из Профилирования данных в пользовательском интерфейсе Airflow.
Хотя это не указано строго в документации Airflow (по крайней мере, я не нашел), я предполагаю, что операторы DML не могут запускаться оттуда; как описано в документах:
Пользовательский интерфейс специальных запросов позволяет выполнять простые SQL-взаимодействия с подключениями к базе данных, зарегистрированными в Airflow.
Я понимаю, что специальные запросы предназначены только для проверки соединений. Вероятно, именно поэтому операторы SELECT работают нормально, а операторы DELETE выдают эти ошибки, даже если запрос правильный.
Я могу подтвердить, что запуск операторов DELETE в DAG либо из MySqlOperator, либо через библиотеку xcom, как вы упомянули в комментарии, работает нормально.
stackoverflow.com/questions/46707132/… не решили вашу проблему?