Динамічне відображення завдань

Створення конвеєрів даних з Airflow

Volker Janz

Senior Developer Advocate at Astronomer

Проблема жорстко закодованих завдань

@task
def process_file_1():
    transform("/data/file_1.csv")
@task
def process_file_2():
    transform("/data/file_2.csv")
@task
def process_file_3():
    transform("/data/file_3.csv")

Приклад Dynamic Task Mapping

Створення конвеєрів даних з Airflow

.expand()

@task
def fetch_files():
    return ["/data/file_1.csv", "/data/file_2.csv", "/data/file_3.csv"]

@task(max_active_tis_per_dagrun=2) # control max parallelism def process_file(path: str): print(f"processing file: {path}")
files = fetch_files() process_file.expand(path=files)

Масштабування під час виконання

Створення конвеєрів даних з Airflow

Відображені завдання в інтерфейсі

 

  • Відображені екземпляри відображаються як індексовані екземпляри під одним завданням
  • Перейдіть у кожен, щоб побачити окремі логи та статус
  • Dag лишається читабельним, навіть якщо екземплярів сотні

Відображені завдання в інтерфейсі

Створення конвеєрів даних з Airflow

.partial()

@task
def process_file(path: str, output_dir: str):
    transform(path, output_dir)

files = get_files() process_file.partial(output_dir="/out").expand(path=files)

partial і expand

Створення конвеєрів даних з Airflow

Проблема декартового добутку

files = get_files()           # ["/data/a.csv", "/data/b.csv", "/data/c.csv"]
destinations = get_targets()  # ["s3://out/a", "s3://out/b", "s3://out/c"]

# Декартів добуток: 3 x 3 = 9 екземплярів (не те, що потрібно!) process.expand(path=files, dest=destinations)

Обʼєднання списків zip

Створення конвеєрів даних з Airflow

.zip()

files = get_files()           # ["/data/a.csv", "/data/b.csv", "/data/c.csv"]
destinations = get_targets()  # ["s3://out/a", "s3://out/b", "s3://out/c"]

# Парами: 3 екземпляри (a->a, b->b, c->c) process.expand_kwargs(files.zip(destinations))

 

  • zip() поєднує елементи один до одного за позицією
  • expand_kwargs розпаковує кожну пару в іменовані аргументи
Створення конвеєрів даних з Airflow

Коли що використовувати

 

Шаблон Використання
expand() Відобразити на один список
partial() Зафіксувати спільні параметри для екземплярів
zip() Спарити кілька списків за позицією

 

  • Допомагають будувати масштабовані Dags
  • Коли дані змінюються, кількість завдань автоматично коригується під час виконання
Створення конвеєрів даних з Airflow

Давайте потренуємось!

Створення конвеєрів даних з Airflow

Preparing Video For Download...