---
title: Операторы
seo:
  title: Операторы — Data Engineer
  description: Тема «Операторы» для собеседования Data Engineer. Какие бывают операторы? Что такое sensor tasks?
---

[Все темы Data Engineer](/data-engineer)

## <strong>Какие бывают операторы?</strong> [#q-14bee738d69b81e2aba1c0996fbff0e6]

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

1. <code>BashOperator</code>&#58; Запускает команды Bash.

1. <code>PythonOperator</code>&#58; Выполняет функции Python.

1. <code>EmailOperator</code>&#58; Отправляет электронные письма.

1. <code>SqlSensor</code>&#58; Ожидает выполнения SQL-запроса.

1. <code>HttpSensor</code>&#58; Ожидает ответа от веб-сервера.

1. <code>DockerOperator</code>&#58; Запускает задачи в контейнере Docker.

1. <code>BranchPythonOperator</code>&#58; Основан на результате выполнения
   функции Python и переходит к следующей задаче в соответствии с логикой.

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

:::note[Ссылки для изучения]

1. [Всё что нужно знать для AirFlow](https://habr.com/ru/articles/682460/)
   :::

---

## <strong>Что такое</strong> <code>sensor tasks</code><strong>?</strong> [#q-14bee738d69b81cdb9b4d33eab7a9e0a]

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

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

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

:::note[Ссылки для изучения]

1. [Всё что нужно знать для AirFlow](https://habr.com/ru/articles/682460/)
   :::

---

## <strong>Какие типы операторов в Airflow вы использовали и для каких задач?</strong> [#q-14bee738d69b816a9071ff43030d0473]

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

{/* prettier-ignore */}
- <code>PythonOperator</code>&#58;

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

    - Пример&#58; выполнение ETL процесса на Python.

    ```python
    python_task = PythonOperator(
        task_id='python_task',
        python_callable=my_function,
        dag=dag
    )
    ```

- <code>BashOperator</code>&#58;

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

    - Пример&#58; запуск скриптов или команд в оболочке.

    ```python
    bash_task = BashOperator(
        task_id='bash_task',
        bash_command='echo "Hello, Airflow!"',
        dag=dag
    )
    ```

- <code>EmailOperator</code>&#58;

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

    - Пример&#58; отправка уведомления о завершении задачи.

    ```python
    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
    )
    ```

- <code>DummyOperator</code>&#58;

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

    - Пример&#58; разделение и группировка задач.

    ```python
    start = DummyOperator(task_id='start', dag=dag)
    end = DummyOperator(task_id='end', dag=dag)
    ```

- <code>BranchPythonOperator</code>&#58;

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

    - Пример&#58; выбор следующей задачи на основе условия.

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

:::note[Ссылки для изучения]

1. [Всё что нужно знать для AirFlow](https://habr.com/ru/articles/682460/)
   :::

---

## <strong>Как создавать и управлять</strong> <code>DAGs</code> <strong>в Airflow?</strong> [#q-14bee738d69b818ebb8bc2f68e1f18d5]

Создание и управление <code>DAGs</code> происходит следующим образом&#58;

{/* prettier-ignore */}
- <strong>Создание</strong> <code>DAG</code>&#58;

    - Определение DAG с использованием объекта <code>DAG</code>.

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

    ```python
    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
    ```

- <strong>Управление</strong> <code>DAG</code>&#58;

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

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

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

:::note[Ссылки для изучения]

1. [Всё что нужно знать для AirFlow](https://habr.com/ru/articles/682460/)
   :::

---

## <strong>Какие методы вы используете для мониторинга и отладки</strong> <code>DAGs</code><strong>?</strong> [#q-14bee738d69b81c2a5b7fa6b5549d6da]

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

{/* prettier-ignore */}
- <code>Airflow UI</code>&#58;

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

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

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

- <strong>Логи задач</strong>&#58;

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

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

- <code>Alerting</code> <strong>и уведомления</strong>&#58;

    - Настройка уведомлений по email или другим каналам (например, Slack) для оповещения о сбоях и успешных выполнения задач.

    ```python
    email_task = EmailOperator(
        task_id='email_task',
        to='example@example.com',
        subject='Airflow Task Failed',
        html_content='The task has failed.',
        dag=dag
    )
    ```

- <strong>Метрики и мониторинг</strong>&#58;

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

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

:::note[Ссылки для изучения]

1. [Всё что нужно знать для AirFlow](https://habr.com/ru/articles/682460/)
   :::
