Step 4 of 8

Target

Объект Target также является одним из основных строительных блоков в инструменте Luigi. Если проводить аналогию с классическими функциями в любом языке программирования, то Target является возвращаемым значением функции. В экосистеме Luigi, Target является результатом исполнения Task.

Чтобы было ещё понятнее, рассмотрим пример. Перед нами стоит задача скачать набор данных (dataset) из внешнего источника и сохранить результат на локальный диск компьютера. Сам алгоритм получения набора данных будет описан в методе run класса Task, а результат это объект типа Target. Конкретно в этом примере LocalTarget.

LocalTarget это наиболее популярный класс типа Target в Luigi. Его интерфейс повторяет интерфейс классического объекта файл. То есть его можно открыть, указав путь через метод open, записать в файл данные, используя метод write и т.д.

В Luigi есть ряд готовых Target классов. В 99% случаев вам скорее всего не нужно будет писать что-то своё. Большинство кейсов покрыто заранее.

Вот лишь часть наиболее популярных классов типа Target:

  • LocalTarget — повторяет интерфейс объекта файла в python и предназначен для работы с файлами в локальной файловой системе.
  • S3Target — интерфейс также похож на класс LocalTarget, только объект предназначен для работы с объектами в хранилище Amazon S3 и S3-совместимыми.
  • PostgresTargetMySqlTargetMSSqlTarget — Target классы для работы с БД PostgreSQL, MySQL, MSSQL соответственно. Эти классы используются непосредственно внутри специализированных Task классов, например, PostgresQuery, CopyToTable. Результатом выполнения задачи по-умолчанию является запись в таблице table_updates соответствующей БД. Примеры с такими классами мы рассмотрим позже в курсе в разделе практических примеров.
  • SQLAlchemyTarget — Target класс для одной из самых популярных библиотек для работы с БД в Python SQLAlchemy. Благодаря этому классу можно написать код для взаимодействия с любой БД, поддерживаемой SQLAlchemy. В Luigi из коробки нет кода для работы с SQLite, поэтому на практическом примере мы познакомимся как его написать.

Более подробно обо всех классах можно узнать в исходном коде пакета luigi.contrib.

Comments