Можно ли получить сразу несколько значений из XCOM для одной задачи в Airflow?

Можно ли получить несколько значений из XCOM, отправленных одной задачей, но с разными ключами?

Я думаю, что видел примеры этого:

# pulls one value
pulled_value = ti.xcom_pull(key=None, task_ids='my_task_id')

и к этому:

# pulls multiple values but from multiple tasks
pulled_value_1, pulled_value_2 = ti.xcom_pull(key=None, task_ids=['my_task_id_1', 'my_task_id_2'])

То, что мне нужно, возможно, будет выглядеть так:

# pulls multiple values but from a single
pulled_value_1, pulled_value_2 = ti.xcom_pull(key=['my_key_1', 'my_key_2'], task_ids='my_task_id')

Я не могу найти это в документации. Это вообще возможно?
Если да, он делает один запрос к базе данных в фоновом режиме или просто повторяет один запрос несколько раз? Если нет, как я могу получить подобное поведение?

Я проверил текущую ветку master (github.com/apache/airflow/blob/main/airflow/models/xcom.py)‌​ и не нашел никакой возможной функции для обработки этого требования, хотя в некоторых случаях это может снизить нагрузку на базу данных. Было бы полезно добавить такую ​​функцию?

elaspog 10.04.2022 08:43
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
1
15
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отвечая на ваши вопросы:

  1. Нет такой функции. xcom_pull принимает task_ids: Optional[Union[str, Iterable[str]]] но с тем же ключом. Вы можете открыть PR для Airflow для добавления искомой функциональности.

  2. Что касается количества запросов: я предполагаю, что «повторяет один запрос» вы спрашиваете, выполняет ли он запрос на task_id. Ответ — нет. Airflow сделал эту оптимизацию в пиар. В исходном коде вы можете видеть, что xcom_pull() использует Xcom.get_many(), а get_many создает фильтр с использованием IN, который позволяет сравнивать несколько значений. Вы можете увидеть соответствующие строки кода здесь.

Спасибо за Ваш ответ! В приведенном выше примере я упомянул task_ids: Optional[Union[str, Iterable[str]]] (см. пример кода # pulls multiple values but from multiple tasks), но это не то, что я искал... Я ищу метод чтения нескольких ключей одновременно, записанных в XCOM одной задачей. Ни для одного метода Xcom.get_many() я не смог найти решения, где он ожидает список ключей, например: key: Optional[Union[str, Iterable[str]]] = XCOM_RETURN_KEY.

elaspog 10.04.2022 09:27

Я неправильно прочитал извините.. отредактировано.

Elad Kalif 10.04.2022 09:28

Другие вопросы по теме