#jinja2 #airflow
#jinja2 #воздушный поток
Вопрос:
Вопрос:
Могу ли я использовать синтаксис строки jinja2 в task_id
string или мы ограничены f-string
?
Пример:
Допустим, я использую BashOperator
и внутри я назначил params
. Я могу успешно использовать их params
в своем bash_command
, однако, как только я использую их в task_id
строке, я получаю следующую ошибку:
airflow.exceptions.AirflowException: The key (my_task_id_string{{ params.paramname1}}{{ params.paramname2}}) has to be made of alphanumeric characters, dashes, dots and underscores
Вместо этого, чтобы смягчить это, я использую f-строку следующим образом: f"my_task_id_string{paramname1}{paramname2}"
Комментарии:
1. Я никогда не использовал
Jinja
, но мое лучшее предположение заключается в том, чтоJinja
fortask_id
НЕВОЗМОЖНО , поскольку Jinja получает во время выполнения , а не во время планирования (по той же причине, по которой вы не можете определить структуру вашегоDAG
на основе выходных данных предыдущей, т. Е. восходящей задачи). Это может измениться с AIP-12 , поэтому следите за его <a rel="nofollow noreferrer noopener" href="https://lists.apache.org/thread.html/2575131a6bfd877bf9b43c783bdc65a085ecac705976d3d8a7c73647@» rel=»nofollow noreferrer»> обсуждением2. Можете ли вы опубликовать свой DAG-код? Если вы пытаетесь использовать макросы airflow внутри вашей базы данных, это не сработает, поскольку, как уже упоминал @y2k-shubham: рендеринг шаблона jinja выполняется во время выполнения, а не во время планирования.
Ответ №1:
Не все параметры в BashOperator шаблонны, то же самое относится ко всем операторам, доступным в Airflow.
Для BashOperator поля, для которых Jinja будет создавать шаблон, являются bash_command
и env
.
Для получения дополнительной справки вы всегда можете обратиться к любым исходным строкам документа operators, в которых будет указано, является ли поле шаблонным.
Для BashOperator вы можете обратиться сюдаhttps://airflow.apache.org/docs/stable/_modules/airflow/operators/bash_operator.html