Перейти к содержимому
На этой странице

Операторы

Все темы Data Engineer

Какие бывают операторы?

Apache Airflow предоставляет набор операторов, которые позволяют выполнить различные задачи в рамках рабочего процесса. Некоторые из наиболее часто используемых операторов в Apache Airflow:

  1. BashOperator: Запускает команды Bash.

  2. PythonOperator: Выполняет функции Python.

  3. EmailOperator: Отправляет электронные письма.

  4. SqlSensor: Ожидает выполнения SQL-запроса.

  5. HttpSensor: Ожидает ответа от веб-сервера.

  6. DockerOperator: Запускает задачи в контейнере Docker.

  7. BranchPythonOperator: Основан на результате выполнения функции Python и переходит к следующей задаче в соответствии с логикой.

  8. SubDagOperator относится к старым версиям Airflow и удалён в Airflow 3. Для логической группировки задач используют TaskGroup; это не отдельный оператор выполнения.


Что такое sensor tasks?

Sensor tasks в Apache Airflow представляют собой специальные задачи, которые ожидают наступления определенного условия перед выполнением следующего шага в рабочем процессе. Они полезны, когда необходимо дождаться определенного внешнего события или условия, прежде чем продолжить выполнение рабочего процесса.

Например, SqlSensor ожидает, когда SQL-запрос вернет результат, или HttpSensor ждет ответа от веб-сервера. Если условие выполнено, рабочий процесс продолжит выполнение. Если условие не выполнено в течение определенного времени, задача может завершиться неудачей или повторно запуститься в следующем цикле планировщика.

Использование sensor tasks позволяет создавать гибкие и отзывчивые рабочие процессы, которые могут реагировать на изменения внешних условий.


Какие типы операторов в Airflow вы использовали и для каких задач?

Ниже показаны операторы и примеры их применения. В личном ответе укажите только свой опыт; старые имена и импорты нужно соотнести с используемой версией Airflow.

  • PythonOperator:

    • Используется для выполнения Python-функций.

    • Пример: выполнение ETL процесса на Python.

    python_task = PythonOperator(
        task_id='python_task',
        python_callable=my_function,
        dag=dag
    )
  • BashOperator:

    • Используется для выполнения команд Bash.

    • Пример: запуск скриптов или команд в оболочке.

    bash_task = BashOperator(
        task_id='bash_task',
        bash_command='echo "Hello, Airflow!"',
        dag=dag
    )
  • EmailOperator:

    • Используется для отправки email-уведомлений.

    • Пример: отправка уведомления о завершении задачи.

    email_task = EmailOperator(
        task_id='email_task',
        to='example@example.com',
        subject='Airflow Task Completed',
        html_content='The task has been completed successfully.',
        dag=dag
    )
  • DummyOperator:

    • Используется для создания пустых задач, которые можно использовать в качестве плейсхолдеров.

    • Пример: разделение и группировка задач.

    start = DummyOperator(task_id='start', dag=dag)
    end = DummyOperator(task_id='end', dag=dag)
  • BranchPythonOperator:

    • Используется для выполнения логики ветвления в зависимости от условий.

    • Пример: выбор следующей задачи на основе условия.

    branch_task = BranchPythonOperator(
        task_id='branch_task',
        python_callable=choose_branch,
        dag=dag
    )

Как создавать и управлять DAGs в Airflow?

Создание и управление DAGs происходит следующим образом:

  • Создание DAG:

    • Определение DAG с использованием объекта DAG.

    • Определение задач и их зависимостей.

    from airflow import DAG
    from airflow.operators.dummy_operator import DummyOperator
    from airflow.operators.python_operator import PythonOperator
    from datetime import datetime
    
    def my_function():
        print("Hello, Airflow!")
    
    default_args = {
        'owner': 'airflow',
        'depends_on_past': False,
        'start_date': datetime(2023, 1, 1),
        'email_on_failure': False,
        'email_on_retry': False,
    }
    
    dag = DAG(
        'my_dag',
        default_args=default_args,
        description='My first DAG',
        schedule_interval='@daily',
    )
    
    start = DummyOperator(task_id='start', dag=dag)
    python_task = PythonOperator(
        task_id='python_task',
        python_callable=my_function,
        dag=dag
    )
    end = DummyOperator(task_id='end', dag=dag)
    
    start >> python_task >> end
  • Управление DAG:

    • Использование Airflow UI для мониторинга и управления DAGs.

    • Изменение расписания, активация/деактивация DAGs.

    • Просмотр логов выполнения задач.


Какие методы вы используете для мониторинга и отладки DAGs?

Я использую следующие методы для мониторинга и отладки:

  • Airflow UI:

    • Использование интерфейса Airflow для просмотра состояния задач и DAGs.

    • Просмотр графа зависимостей и логов задач.

    • Запуск, приостановка и перезапуск задач.

  • Логи задач:

    • Просмотр логов выполнения задач для отладки ошибок и анализа производительности.

    • Использование логирования в задачах для записи отладочной информации.

  • Alerting и уведомления:

    • Настройка уведомлений по email или другим каналам (например, Slack) для оповещения о сбоях и успешных выполнения задач.
    email_task = EmailOperator(
        task_id='email_task',
        to='example@example.com',
        subject='Airflow Task Failed',
        html_content='The task has failed.',
        dag=dag
    )
  • Метрики и мониторинг:

    • Использование метрик и мониторинга для отслеживания производительности DAGs и задач.

    • Интеграция с инструментами мониторинга (например, Prometheus, Grafana).


Как организовать backfill витрины в Airflow?

Backfill задают диапазоном логических data intervals, а задачи делают идемпотентными для каждого интервала. В Airflow используют catchup, backfill или отдельный управляемый DAG, ограничивая pools, max_active_runs и нагрузку на источник. Учитывают зависимости downstream-витрин и текущие регулярные запуски. После расчета сверяют объем, ключевые метрики и пропуски, а публикацию отделяют от вычисления, чтобы не открыть неполный результат. Нужно учитывать порядок вычисления и побочные эффекты уже выполненных подвыражений: исключение не откатывает их автоматически.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: Data Engineer, ETL-разработчик. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.