Как прочитать значение, переданное в засыпку воздушного потока —conf {«ключ»: «значение»}

#airflow

#воздушный поток

Вопрос:

У меня есть база данных воздушного потока, которую я могу запустить с некоторыми параметрами, используя:

 airflow trigger_dag 'my_dag' --conf '{"key":"value"}'
 

тогда я могу получить «значение» в моей базе данных следующим образом:

 context['dag_run'].conf.get('key')
 

Я хотел бы сделать то же самое, используя засыпку:

 airflow backfill 'my_dag' --conf '{"key":"value"}' -s 2019-04-15 -e 2019-04-16
 

Возможно ли получить переданное значение в —conf для обратной засыпки?

Ответ №1:

Я столкнулся с этим вопросом, столкнувшись с той же проблемой, и, хотя прошло несколько лет, я подумал, что это может кому-то помочь.

Как подозревал OP, предыдущие выполнения DAG влияют на то, будет ли обратная засыпка использовать conf, указанный в командной строке. Это было недавно поднято в этой проблеме, и исправление было объединено: https://github.com/apache/airflow/pull/22837

Ответ №2:

Да, команда обратной засыпки также имеет conf параметр.

Из: https://airflow.apache.org/1.10.3/cli.html#backfill

 airflow backfill [-h] [-t TASK_REGEX] [-s START_DATE] [-e END_DATE] [-m] [-l]
                 [-x] [-i] [-I] [-sd SUBDIR] [--pool POOL]
                 [--delay_on_limit DELAY_ON_LIMIT] [-dr] [-v] [-c CONF]
                 [--reset_dagruns] [--rerun_failed_tasks] [-B]
                 dag_id

-c, --conf
JSON string that gets pickled into the DagRun’s conf attribute
 

Комментарии:

1. возможно, проблема в том, что я пытаюсь заполнить базу данных, которая была запущена с параметрами по умолчанию. Я имею в виду, когда планировщик воздушного потока выполнял DAG, у него не было никаких параметров. Я очистил экземпляр, затем выполнил команду: обратная засыпка воздушного потока -conf … str(context[‘dag_run’].conf) равно None . Почему это так?