Как использовать макросы в функциях Airflow - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь вычислить хеш для каждой задачи в потоке воздуха, используя комбинацию dag_id, task_id и execute_date. Я делаю вычисления в init пользовательского оператора, чтобы я мог использовать его для вычисления уникального retry_delay для каждой задачи (я не хочу использовать экспоненциальный откат)

Мне трудно использовать макрос {{execute_date}} внутри вызова хэш-функции или функции int, в этих случаях поток воздуха не заменяет его на конкретную дату (просто сохраняет строку {{execute_date}}, и я получаю то же самое относится ко всем датам исполнения

self.task_hash = int(hashlib.sha1("{}#{}#{}".format(self.dag_id,
                                                    self.task_id,
                                                    '{{execution_date}}')
                                       .encode('utf-8')).hexdigest(), 16)

Я поместил task_hash в template_fields, также я попытался выполнить вычисление в пользовательском макросе - это работает для хеш-части, но когда я помещаю его в int (), это та же проблема

Любое рабочее место, или, возможно, я мог бы получить дату выполнения (при инициализации оператора), а не из макросов?

спасибо

1 Ответ

0 голосов
/ 14 мая 2019

Попробуйте:

self.task_hash = int(hashlib.sha1("{}#{}#{{execution_date}}".format(
    self.dag_id, self.task_id).encode('utf-8')).hexdigest(), 16)
...