Воздушный поток: образец для подзадачи воздушного потока один раз

Из документации по воздушному потоку:

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