Воздушный поток: образец для подзадачи воздушного потока один раз
Из документации по воздушному потоку:
SubDAGs must have a schedule and be enabled. If the SubDAG’s schedule is set to None or @once, the SubDAG will succeed without having done anything
Я понимаю, что субдагоператор фактически реализован как BackfillJob, и поэтому мы должны предоставить оператору schedule_interval
. Однако существует ли способ получить семантический эквивалент schedule_interval="@once"
для поддиапазона? Я волнуюсь, что если я использую set schedule_interval="@daily"
для поддиапазона, что поддиаг может запускаться более одного раза, если поддак занимает больше времени, чем один день для запуска.
def subdag_factory(parent_dag_name, child_dag_name, args):
subdag = DAG(
dag_id="{parent_dag_name}.{child_dag_name}".format(
parent_dag_name=parent_dag_name, child_dag_name=child_dag_name
),
schedule_interval="@daily", # <--- this bit here
default_args=args
)
... do more stuff to the subdag here
return subdag
TL;DR: как подделать "только запустите этот поддак один раз за триггер родительского дага"
Ответы
Ответ 1
Я нахожу, что
[email protected]
отлично работает для моих подкатегорий. Возможно, моя версия устарела, но у меня было больше проблем с моими поддаками, даже когда все задачи удались (или были пропущены), чем наоборот.
Фактический пример кода, который довольно счастливо работает на моей машине прямо сейчас:
subdag_name = ".".join((parent_name,child_name))
logging.info(parent_name)
logging.info(subdag_name)
dag_subdag = DAG(
dag_id=subdag_name,
default_args=dargs,
schedule_interval="@once",
)
На самом деле, я изначально построил почти все мои проклятия, как прославленные файлы cfg для моих поддак. Не уверен, насколько хороша идея, которая после некоторых проб и ошибок, но интервал времени для меня никогда не был блокирующим.
Я использую относительно недавно построенную версию 1.8 с несколькими настройками. Я следовал примеру dag-предложения о сохранении моих поддиапазонов в папке внутри папки dags, чтобы они не отображались в DagBag.
Ответ 2
Попробуйте внешний шаблон триггера с schedule = None для поднабора. В этом случае он будет запускаться только при срабатывании родительского dag