Как создавать, обновлять и удалять переменные воздушного потока без использования графического интерфейса?

Я изучал воздушный поток и писал DAG для конвейера ETL. Это предполагает использование среды AWS (S3, Redshift). Он имеет дело с копированием данных из одного ведра в другое после их сохранения в красном смещении. Я храню имена сегментов и префиксы как переменные в воздушном потоке, для которых вам нужно открыть графический интерфейс и добавить их вручную.

Какой из следующих вариантов является наиболее безопасным и широко используемым в отрасли.

  • Можем ли мы использовать airflow.cfg для хранения наших переменных (имен сегментов) и доступа к ним в наших DAG?
  • Используйте собственный файл конфигурации и проанализируйте его содержимое с помощью configparser
  • Используйте графический интерфейс для добавления переменных

person Command    schedule 12.08.2019    source источник
comment
Я думаю, это зависит от ваших вариантов использования. Ожидаете ли вы, что имена сегментов и префиксы будут часто меняться, и у вас есть возможность перейти в графический интерфейс для обновления переменных без PR (проблема может заключаться в том, что люди случайно обновили / удалили его из пользовательского интерфейса)? Или вы хотите отслеживать изменения в git, но каждый раз, когда вы вносите изменения, добавляя PR   -  person Chengzhi    schedule 13.08.2019
comment
Переменные могут меняться не так часто. Я не хочу открывать графический интерфейс и добавлять переменные. Есть ли способ где-то хранить данные переменных и автоматически обновлять графический интерфейс?   -  person Command    schedule 13.08.2019
comment
Вы можете потенциально иметь список ваших переменных как json, и во время процесса CICD воздушного потока используйте команду airflow cli для выполнения обновления, отметьте airflow variables -i airflow.apache.org/cli.html#variables,   -  person Chengzhi    schedule 13.08.2019
comment
Я думаю, что это решает мою проблему, и мне, вероятно, следует переосмыслить свой вопрос. Я сделаю это. Можете ли вы объяснить, какими будут ключи и значения файла JSON и где их хранить в ответе. Я выберу это как правильный ответ. @Chengzhi   -  person Command    schedule 13.08.2019
comment
Также см. Как обновить переменную воздушного потока с помощью кода?   -  person y2k-shubham    schedule 18.09.2020


Ответы (2)


Подводя итог: вы можете использовать airflow cli для выполнения операции импорта переменных из файла json. Вы можете использовать следующую команду airflow variables -i [1] и построить ее через конвейер воздушного потока CICD или запустить ее вручную. Это должно обрабатывать случай вставки / обновления. Для удаления вы можете явно вызвать airflow variables -x, я не думаю, что в настоящее время вы можете выполнить пакетное удаление в воздушном потоке.

У вас может быть файл JSON в следующем формате со значением ключа:

{
    "foo1": "bar1",
    "foo2": "bar2"
}

Здесь следует отметить одну вещь: вы можете рассматривать переменную как хранилище значений ключа, поэтому убедитесь, что у вас нет дублированных ключей при импорте (в противном случае вы можете переопределить это с неожиданным результатом)

[1] airflow.apache.org/cli.html#variables

person Chengzhi    schedule 12.08.2019

Airflow использует SQLAlchemy модели, чтобы поиграть с такими объектами, как Connection, Variable, Pool и т. Д. Более того, он никоим образом не пытается скрыть это от конечного пользователя, а это означает, что вы можете свободно манипулировать этими объектами, используя базовую магию SQLAlchemy.


Если вы собираетесь изменить переменные программно (из задачи Airflow), почерпните вдохновение из здесь

Другие полезные ссылки для справки

person y2k-shubham    schedule 13.08.2019