Как переливать данные между базами одной командой без кода и боли
Знакомая ситуация: нужно быстро перебросить таблицу из MongoDB в Postgres или выгрузить данные из Google Analytics в BigQuery для аналитики. Обычно это превращается в написание очередного Python-скрипта на коленке, возню с библиотеками-коннекторами и отладку типов данных. А если данных много, приходится думать об инкрементальной загрузке, чтобы не гонять гигабайты по кругу.
Недавно наткнулся на ingestr. Это CLI-утилита, которая делает ровно одну вещь: берет данные из точки А и кладет их в точку Б. Без написания кода, без настройки сложных ETL-платформ и без лишних сущностей.
Что это вообще такое
Разработчики из Bruin создали инструмент, который работает по принципу «указал источник — указал цель». Внутри это обертка над мощными движками передачи данных, но для нас она выглядит как простая консольная команда.
Проект написан на Go, но тесно дружит с Python-экосистемой. Его можно поставить через обычный pip install ingestr или коротким bash-скриптом. Это удобно, если нужно быстро закинуть инструмент на сервер или в CI/CD пайплайн.
Как это работает на практике
Самый простой пример — перенос таблицы из локального Postgres в облачный BigQuery. Команда выглядит так:
ingestr ingest \
--source-uri 'postgresql://admin:admin@localhost:8837/web?sslmode=disable' \
--source-table 'public.users_data' \
--dest-uri 'bigquery://my-project?credentials_path=/path/to/key.json' \
--dest-table 'analytics.users_data'
Инструмент сам разберется со схемами, типами колонок и созданием таблицы в месте назначения. Если таблица уже есть, ingestr предложит варианты, как именно обновлять данные.
Что умеет ingestr
Инструмент закрывает большинство типовых задач по синхронизации данных, с которыми я сталкиваюсь в работе.
Разные стратегии загрузки
Просто копировать всё подряд — плохая идея для больших объемов. В ingestr встроено три режима:
- Append: просто дописывает новые строки в конец.
- Merge: обновляет существующие записи и добавляет новые (нужен первичный ключ).
- Delete+Insert: очищает целевую таблицу перед заливкой свежих данных.
Огромный список источников
Меня зацепило количество поддерживаемых коннекторов. В списке не только классические базы вроде MySQL, Postgres, Oracle или MS SQL Server. Там есть MongoDB, ClickHouse, Snowflake и даже экзотика типа Cassandra или DuckDB.
Отдельный плюс за интеграцию с платформами. Можно в одну команду вытянуть данные из:
- Маркетинговых сервисов: Facebook Ads, Google Ads, TikTok Ads.
- Таск-трекеров и CRM: Jira, Notion, HubSpot, Salesforce, Airtable.
- Платежек: Stripe, Wise.
- И даже из GitHub или Slack.
Производительность
Разработчики заявляют о неплохой скорости. Например, в их бенчмарках переливка из MongoDB в Postgres проходит довольно бодро.
Кому это пригодится
Я вижу несколько сценариев, где ingestr экономит кучу времени.
Во-первых, это быстрая аналитика. Когда маркетологи просят «выгрузить данные из Stripe в нашу базу», вместо того чтобы копаться в API Stripe, вы просто запускаете одну команду.
Во-вторых, миграции. Если вы переезжаете с одной базы на другую или делаете реплику для тестов, ingestr справится с этим быстрее, чем самописный скрипт.
В-третьих, автоматизация. Команду легко запихнуть в cron или GitHub Actions. Никаких зависимостей, кроме самого бинарника или python-пакета.
Нюансы и лицензия
Стоит обратить внимание на лицензию. Проект использует Functional Source License 1.1. Это значит, что вы можете свободно использовать его внутри компании, для тестов, разработки и личных нужд. Но нельзя построить на базе ingestr свой платный сервис по переливке данных и продавать его как конкурента. Через два года после релиза каждой версии код переходит под Apache 2.0.
Документация у проекта вполне вменяемая, есть Quickstart и описание всех флагов. Если чего-то не хватает, разработчики активно общаются в Slack и принимают пул-реквесты.
Если вам надоело писать однотипные скрипты для импорта CSV или синхронизации таблиц между базами, попробуйте ingestr. Это тот случай, когда CLI-инструмент делает жизнь проще, заменяя собой часы рутинного кодинга.
Для старта достаточно:
pip install ingestr
ingestr --help
Проект активно растет, и если вашей любимой базы еще нет в списке, скорее всего, она там скоро появится. Либо можно завести issue — авторы охотно идут на контакт.
