Симон Уиллисон, автор Datasette — инструмента для публикации SQLite-баз как интерактивных веб-сервисов — столкнулся с классической «серой зоной»: Python-библиотека sqlite3 возвращает данные запроса, но не говорит, из какой таблицы пришёл каждый столбец. Нужен был точный адрес вида table.column — для JOIN-ов, CTE, подзапросов. Он поставил задачу Claude Code (Opus 4.8). Агент нашёл три принципиально разных решения.
Контекст
Datasette — open-source инструмент, который позволяет за минуты превратить SQLite-базу в интерактивный веб-интерфейс с SQL-редактором, фильтрами и экспортом. Его используют журналисты-расследователи, аналитики, небольшие команды, которым нужно открыть данные без полноценного дата-стека. Когда пользователь пишет произвольный SQL, Datasette хочет показывать контекст: откуда столбец, что это за таблица, есть ли связанные строки. Для этого нужно знать происхождение каждого столбца результата — то, что называют column provenance.
Проблема: стандартный Python-модуль sqlite3 этого не раскрывает. В самой C-библиотеке SQLite функция sqlite3_column_table_name() существует — она возвращает имя таблицы для каждого столбца результата. Но Python-обёртка её не экспортирует. Это типичная ситуация, когда высокоуровневый API намеренно или по упущению скрывает часть возможностей движка.
Уиллисон — опытный разработчик, который мог бы разобраться сам. Но он сделал ставку на другой подход: делегировал разведку агенту.
Аналитика
Claude Code предложил три пути. Первый — через библиотеку apsw (Another Python SQLite Wrapper), которая обёртывает SQLite более полно, чем стандартный модуль, и даёт доступ к расширенным метаданным. Второй — через ctypes: прямой вызов C-функции sqlite3_column_table_name() из динамической библиотеки, минуя Python-обёртку. Третий — анализ вывода команды EXPLAIN: SQLite раскрывает в нём план выполнения, из которого умелым разбором можно восстановить источник каждого столбца.
Это и есть суть agentic-кодинга в 2026 году. AI не выдаёт один «правильный» ответ — он исследует пространство решений параллельно, возвращает варианты с разными трейдофами. Apsw — чистый API, но зависимость. Ctypes — без зависимостей, но хрупко при смене платформы. EXPLAIN — хакерский, но работает везде. Разработчик выбирает, понимая контекст. Агент провёл разведку за него.
Более широкий паттерн: задачи, которые раньше требовали специалиста с опытом работы с C-расширениями или внутренностями SQLite, теперь решаются на уровне «описать задачу Claude Code». Порог входа снизился не потому что задача стала проще — а потому что разведочная фаза делегирована. Это особенно ценно в экосистемах вроде SQLite, где документация хорошая, но «серых зон» между spec и реализацией хватает.
Кейсы применения в бизнесе
B2B-SaaS стартап с кастомным конструктором отчётов: если пользователи пишут SQL внутри продукта, column provenance позволяет добавить тултипы («этот столбец из таблицы clients»), валидацию прав доступа на уровне таблицы, ссылки на связанные строки. Без column provenance это реализуется через статический парсинг SQL — ненадёжно на сложных запросах. Подход с ctypes или apsw даёт точный ответ от самого движка. Техническая сложность — несколько часов с Claude Code вместо нескольких дней исследований.
Корпорация с legacy и требованием data lineage: если часть данных хранится в SQLite — embedded-базы, аналитические снэпшоты, локальные кэши — автоматическое отслеживание происхождения столбцов помогает строить data catalog без ручной разметки. Datasette с column provenance как внутренний портал для data engineering — рабочий сценарий без дорогих enterprise-решений.
SMB и локальный бизнес в КР/СНГ: небольшие компании часто хранят данные в SQLite через выгрузки из учётных систем. Когда аналитик строит отчёт, никто не знает, откуда взялась та или иная цифра — «единственный человек, который знает базу», давно уволился. Column provenance + Datasette превращает «чёрный ящик» в прозрачный инструмент, где видно происхождение каждого поля.
Кейсы в личной жизни
Разработчик: если работаете с SQLite и хотите добавить column provenance в свой инструмент — воспроизведите подход Уиллисона. Запрос Claude Code: «Три подхода к получению table.column для каждого столбца результата произвольного SELECT в Python + SQLite: через apsw, через ctypes, через EXPLAIN. Плюсы и минусы каждого.» Сравните, выберите под свои зависимости.
Аналитик данных или контент-мейкер: Datasette — быстрый способ опубликовать датасет для статьи или исследования. pip install datasette, одна команда — и база открыта в браузере. Column provenance делает публичные данные прозрачнее для читателей: они видят не просто числа, а их происхождение.
Студент или фрилансер: история — хороший пример декомпозиции через AI. Не «напиши мне код», а «найди несколько подходов и объясни трейдофы». Это прокачивает понимание задачи и навык работы с агентами одновременно. Применимо к любой низкоуровневой задаче: работа с бинарными форматами, сетевые протоколы, системные вызовы.
Как применить сегодня
- Установите apsw и сравните его API со стандартным
sqlite3— разница в доступных метаданных сразу заметна. - Попробуйте Datasette:
pip install datasette && datasette your.db— две минуты, и у вас веб-интерфейс к любой SQLite-базе. - Для задачи column provenance спросите Claude Code с тремя вариантами: apsw / ctypes / EXPLAIN — и попросите сравнить по зависимостям, портабельности, надёжности.
- Если строите SQL-редактор внутри продукта — добавьте column provenance в backlog: это улучшает UX и открывает возможности для валидации прав доступа на уровне таблиц.
- Паттерн «попроси AI исследовать несколько подходов» применяйте к любой задаче с неочевидным решением — особенно там, где нужно лезть в C API, низкоуровневые протоколы или внутренности фреймворка.