Данные / Интеграция

Вопросы к строкам таблицы в DuckDB

Расширение добавляет в SQL функции, которые спрашивают Jev о строках таблицы и возвращают типизированные значения.

Запись терминала автора с SQL-запросом и типизированными ответами Jev по строкам DuckDB
Демо автора: SQL и ответы Jev · Оригинал
По делу

Что это решает

Расширение DuckDB позволяет задать вопрос о каждой строке таблицы прямо в SQL. Оно возвращает не текст для последующего разбора, а SQL-значение: ENUM, DOUBLE или STRUCT — в зависимости от заданных критериев.

Результат для пользователя

Классифицировать строки таблицы прямо в SQL

Почему критерии должны быть константой

Функция получает текст строки и литерал с вариантами ответа. jev_choice делает из списка вариантов тип ENUM; jev_score возвращает число по заданной шкале; jev_noul — вероятность «да»; jev_ask объединяет несколько вопросов в STRUCT. Чтобы DuckDB знал тип колонки ещё на стадии планирования запроса, набор критериев нельзя менять от строки к строке.

Это даёт SQL возможность сразу сортировать, фильтровать и агрегировать результат без JSON-парсера. Пустой набор вариантов, дубли и некорректная шкала отклоняются при планировании, а не посреди большой таблицы.

Как считать стоимость большого запроса

По README один вызов модели приходится на строку, поэтому обработка 100 тысяч строк — это не один запрос. Расширение отправляет строки параллельно небольшими группами, повторяет временные сбои с задержкой и кеширует одинаковые запросы на время процесса. Но вызов функции в двух местах SQL-запроса может означать две оценки той же строки; лучше вычислить результат один раз и затем обращаться к нему.

Служебная функция jev_usage() показывает число обращений, попадания в кеш и токены. Это позволяет оценить расход на небольшой выборке до запуска по всему массиву.

Практическая задача: триаж тикетов

Опубликованный пример одновременно определяет тип обращения, серьёзность и срочность по тексту тикета. Результат можно сохранить как STRUCT и затем извлечь его поля в SELECT. Важный момент: значения вроде «срочно» задаются описанием критерия, а не угадываются из названия SQL-колонки.

Как попробовать самому

  1. 01Собрать расширение по инструкции проекта и создать секрет DuckDB с API-ключом Jev.
  2. 02Начать с 5–10 строк и одного jev_choice, проверив описания вариантов и SQL-тип результата.
  3. 03Для нескольких характеристик использовать jev_ask, посмотреть jev_usage() и только потом расширять выборку.
Инструкция и код автора

Ограничение этого проекта

Это API-вызовы по строкам, а не бесплатная локальная функция. Перед обработкой таблиц с конфиденциальными данными проверьте состав передаваемого текста и стоимость полной выборки.