LLM строит data lineage из SQL за секунды: как заменить недели ручного разбора
Большую языковую модель можно превратить в инструмент, который за секунды разбирает сложный SQL-запрос и выстраивает полную карту зависимостей данных от источника до конечного отчёта, заменяя недели ручного реверс-инжиниринга.

Документация в хранилищах данных устаревает быстрее, чем её обновляют, и при миграции в облако или замене устаревших систем компании теряют контроль над тем, откуда берутся цифры в дашбордах и отчётах. Автоматическое извлечение data lineage (происхождения данных) из SQL-кода снимает эту проблему без ручного разбора тысяч строк.
Зачем вообще нужен data lineage?
Data lineage, это карта жизненного цикла данных: откуда пришли, через какие преобразования прошли, куда попали. Без такой карты невозможно ответить на три вопроса, которые встают при любой миграции:
- Какие витрины и отчёты зависят от конкретного источника?
- Какие преобразования нужно проверить или перенастроить?
- Откуда в новой системе взять корректные данные?
Традиционный подход, вручную поддерживать документацию или проводить реверс-инжиниринг SQL-кода хранилища. Оба пути дороги и ненадёжны: спецификации устаревают, а SQL-скрипты в промышленных хранилищах содержат вложенные подзапросы, CTE (общие табличные выражения, когда сложный запрос разбивают на именованные блоки для удобства), оконные функции и UNION ALL. Разобрать такой код вручную, задача на дни.
LLM, обученная на больших корпусах программного кода, понимает синтаксис SQL глубже, чем универсальная языковая модель, и способна корректно определить, какая таблица является целевой, а какие выступают источниками.
Что понадобится
- Доступ к API языковой модели, заточенной на код. В описанном подходе использовали GigaChat от Сбера, доступный в России без VPN.
- Python 3.8+ и библиотеки:
langchain_gigachat(доступ к модели),langchain(построение цепочек вызовов). - Набор SQL-скриптов, которые нужно разобрать. Подойдут реальные скрипты наполнения таблиц из вашего хранилища.
- Время: настройка окружения и первый прогон занимают от часа до двух, дальше каждый скрипт обрабатывается за секунды.
Пошаговая инструкция
- Установите зависимости. В терминале выполните:
pip install langchain langchain-gigachat
-
Получите ключ API GigaChat. Зарегистрируйтесь в программе для разработчиков Сбера, создайте проект и скопируйте токен авторизации.
-
Напишите системный промпт (system prompt, инструкция, которая задаёт модели роль и формат ответа). Промпт должен чётко описать задачу: определить целевую таблицу (target) и таблицы-источники (sources) из SQL-запроса, вернуть результат в JSON, использовать полные имена вида
схема.таблица, игнорировать алиасы и временные объекты, корректно обрабатыватьUNION ALLи вложенные подзапросы.
Ты — эксперт по SQL. Проанализируй запрос и верни JSON:
{"target": "схема.таблица", "sources": ["схема.таблица1", "схема.таблица2"]}
Правила:
- Используй полные имена (схема.таблица), без алиасов.
- Игнорируй временные объекты и CTE.
- Корректно обрабатывай UNION ALL и вложенные подзапросы.
- Не добавляй пояснений, только JSON.
- Создайте класс-обёртку. Используйте LangChain Expression Language (LCEL), чтобы выстроить цепочку: форматирование промпта, передача в модель, парсинг результата в структурированный JSON.
from langchain_gigachat import GigaChat
from langchain.prompts import ChatPromptTemplate
from langchain.output_parsers import JsonOutputParser
llm = GigaChat(credentials="ВАШ_ТОКЕН", model="GigaChat-Pro")
prompt = ChatPromptTemplate.from_messages([
("system", "СИСТЕМНЫЙ ПРОМПТ ИЗ ШАГА 3"),
("human", "{sql_query}")
])
chain = prompt | llm | JsonOutputParser()
- Подайте SQL-запрос на вход цепочки.
result = chain.invoke({"sql_query": "INSERT INTO схема.целевая SELECT ... FROM схема.источник ..."})
print(result)
-
Проверьте результат вручную на нескольких скриптах. Сравните ответ модели с реальной структурой зависимостей. Именно ручная сверка первых результатов покажет, насколько точен промпт и нужна ли доработка.
-
Масштабируйте. Прогоните все скрипты хранилища пакетом и соберите карту data lineage целиком.
На вход подали реальный SQL-скрипт наполнения таблицы d_agr_cred_agr_collat_core. Скрипт содержал три уровня вложенных подзапросов, оконные функции (PARTITION BY, ROW_NUMBER) и фильтрацию по результату оконной функции. Это 30+ строк SQL, которые вручную разбирать минут двадцать.
Модель вернула:
{
"target": "s_grnplm_vd_t_bvd_db_dmslcl.d_agr_cred_agr_collat_core",
"sources": ["s_grnplm_vd_t_bvd_db_dmslcl.d_agr_cred_agr_collat"]
}
Результат верный: целевая таблица определена по INSERT INTO, единственный реальный источник извлечён из самого глубокого подзапроса, алиасы a, a_1, t отброшены.
- Промпт без требования «только JSON». Модель начинает объяснять логику запроса вместо того, чтобы вернуть структурированный ответ. Парсер ломается.
- Алиасы в результате. Если в промпте не указать явно «без алиасов, полные имена», модель может вернуть
tвместосхема.таблица. - CTE принятые за источники. Общее табличное выражение, это промежуточный объект, не реальная таблица. Без явного указания модель иногда включает CTE в список sources.
- Слепое доверие. LLM допускают галлюцинации (уверенно выдуманные ответы). Первые 10-15 скриптов обязательно сверяйте вручную, прежде чем доверять результатам на всём хранилище.
- Слишком длинные запросы. У каждой модели есть лимит контекстного окна (максимальный объём текста за один вызов). Скрипт на тысячи строк может не поместиться, разбивайте на части.
Что делать с результатами, по ролям
Аналитику данных и инженеру хранилища. Собранный data lineage покажет, какие отчёты и витрины «сломаются» при замене источника. Перед миграцией в облако прогоните все скрипты и получите реестр зависимостей за часы, а не за недели.
Автору Дзена и контент-маркетологу. Если пишете про данные, аналитику или импортозамещение ИТ, этот кейс даёт конкретный пример того, как LLM решает рутинную задачу в российских реалиях. GigaChat работает без VPN и подписок на зарубежные сервисы.
Руководителю или предпринимателю. При замене устаревших систем (legacy) главный риск, потерять связность отчётности. Автоматический data lineage снижает этот риск и сокращает сроки проекта.
Подход проверяли на 127 SQL-скриптах разной сложности, и результаты показывают, что модели, обученные на коде, справляются с задачей data lineage заметно лучше универсальных языковых моделей. Я бы рекомендовал начинать именно с GigaChat: он доступен в России, не требует обходных путей и подходит для корпоративных задач, где данные нельзя отправлять на зарубежные серверы.
Честная оговорка: LLM не заменяет полноценный инструмент управления метаданными. Модель может ошибиться на нестандартных конструкциях SQL, и результат всегда нужно валидировать. Но как способ быстро получить первую версию карты зависимостей, когда документации нет или она устарела, это рабочий инструмент прямо сейчас.
Попробуйте AI-ассистент dzen.guru
Если вы создаёте контент про технологии и данные, наш ассистент поможет структурировать материал и подобрать подачу для аудитории Дзена.
ПопробоватьКарта происхождения данных, которую раньше рисовали неделями, теперь собирается за один прогон по SQL-скриптам, и для российских компаний, меняющих инфраструктуру, это не теоретическая возможность, а рабочий метод с конкретным стеком: Python, LangChain, GigaChat.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также
В работе каких специалистов применяется искусственный интеллект: вакансий с ИИ стало в 1,5 раза больше
Вопрос «в работе каких специалистов применяется искусственный интеллект» стал практическим: по данным исследования hh.ru за первый квартал 2025 года, доля…

Google открыла бесплатный gemini api key для ИИ-агентов: хуки контролируют каждое действие
Google второго июня открыла бесплатный доступ к управляемым ИИ-агентам через Gemini API и добавила механизм хуков, который позволяет контролировать каждое…

AI спецификации пишутся не до, а вместе с кодом: метод Anthropic в четыре шага
Спецификация для ИИ-агента, которую вы пишете за один присест, покрывает лишь малую часть реальной задачи, а остальное всплывает только по ходу работы, и…
Комментарии