Сделать из кучки скриптов нор­маль­ный локальный ETL

Опубликовано 7 июня 2021 г.

Стартапы и предпринимательство

Мой Калькулятор стоимости жизни использует данные с Numbeo. Сейчас процесс выгрузки данных крайне примитивный.

  • есть несколько скриптов, которые с помощью scrapy парсят сайт и складывают данные в промежуточные текстовые файлы
  • ещё пара скриптов берут эти текстовые файлы, как-то обрабатывают и группируют данные и генерят JSON-файлы, которые используются в приложении
  • bash-скрипт, который объединяет первые 2 шага

Всё это я запускаю локально (это намеренное решение, чтоб не городить CI/CD инфраструктуру). Деплоится всё отдельным ansible-плейбуком, чтобы разложить JSON в S3-подобное хранилище и обновить версию/URL в джаваскрипте вместе с релизом самого JS. Это тоже осознанное решение, потому что так деплоится мой сайт, а калькулятор — его часть.

Меня всё устраивает. Но дело в том, что на куче скриптов и текстовых файлов без SQL сложно делать нормальные агрегации и обрабатывать данные серьёзнее, чем просто выкинуть пустые поля или лишние символы.

Я вижу следующую итерацию этой системы как простейший ETL-пайплайн, который я также буду запускать локально.

  • Extract: один питонячий скрипт, который инициализирует scrapy и сгружает всё в SQLite
  • Transform: набор классов или функций, запускаемых в определённом порядке, чтобы применить все нужные обработки и создать агрегированные таблицы и всякие вьюхи
  • Load: взять все получившиеся таблички и нагенерировать из них JSON-файлов

Всё это несложно запрограммировать, но мне интересно, есть ли какие-то инструменты для таких задач. Что-то типа конфигурируемого комбайна, который уже умеет парсить, складывать данные в БД, обрабатывать и писать JSON, а ты ему только реализацию каждого шага подсовывай.

Поделитесь опытом в комментариях.

Читать дальше