МВП за два дня: конструктор запросов к SPARK без команды
Появилась идея внутреннего сервиса: дать аналитикам и продукту интерфейс, где запрос к SPARK собирается из блоков, а не из сырого SQL в Jupyter. Полноценной команды не было — я один, плюс доступ к корпоративным LLM.
Зачем
Раньше типовой путь выглядел так: описать задачу инженеру данных, дождаться скрипта, прогнать на кластере, поправить фильтры. Для частых срезов по одним и тем же таблицам это дорого по календарю. Нужен был МВП: сохранённые шаблоны, визуальные фильтры, отдача в API, чтобы фронт или другой сервис мог дернуть готовый запрос.
Что использовал
- Cursor — навигация по репозиторию, рефакторинг, быстрые правки по диффу.
- Claude Code — каркас модулей, Pydantic-схемы, заготовки тестов.
- Внутренние LLM-агенты — политики компании, без утечки данных наружу.
За два рабочих дня агенты накидали:
- FastAPI-бэкенд с CRUD по сохранённым запросам и метаданным таблиц;
- черновой Swagger / OpenAPI;
- простую модель «таблица → колонки → фильтры → превью SQL».
Прототип UI собирал в v0: drag-and-drop блоки, превью JSON и кнопка «Run Query». Это не прод, но на демо заказчику хватило, чтобы обсудить сценарии без макетов в Figma.
Где ушло реальное время
Код появлялся быстро. Около 80% усилий ушло не на генерацию, а на:
| Область | Что пришлось делать руками |
|---|---|
| Тестирование | Граничные типы колонок, пустые фильтры, таймауты к SPARK |
| Архитектура | Разделить слой «сборка SQL» и «исполнение», убрать дубли в сервисах |
| Безопасность | Роли, лимиты на таблицы, запрет произвольных подзапросов, аудит |
Модель охотно добавляла «удобные» эндпоинты без проверки прав. Один такой метод с доступом к произвольной таблице я вырезал уже на ревью с коллегой из безопасности.
Итог
AI ускоряет старт: каркас, бойлерплейт, документация. Инженер всё равно нужен — за контракт API, за то, что уйдёт в прод, и за то, что агент не увидит в промпте. МВП за два дня — правда. Путь до «можно отдавать смежникам без присмотра» — отдельная история, измеряется неделями.
Подключить реальный пул к SPARK, вынести сборку SQL в отдельный модуль с юнит-тестами на строки, согласовать SLA с платформой данных. UI из v0 — только референс; в прод пойдёт внутренний React, если МВП одобрят.