Трек A · Задание A2
Спросите Doris через MCP
Подключите Doris к привычному ИИ-помощнику и получайте ответы на реальные вопросы с помощью настоящего SQL.
- 45–90 мин
- Для начинающих
- Python 3.12+ · любой клиент MCP
- ИИ-инструменты приветствуются
Нужна помощь? Спросите в #dev в Slack Apache Doris. Разработчики и другие участники помогут вам.
Подготовка
Что вы создаёте, почему Doris упрощает задачу и как запустить кластер.
Что вы создадите
Превратите своего ИИ-помощника в аналитика данных Doris.
Apache Doris MCP Server открывает доступ к кластеру любому помощнику с поддержкой MCP. Подключите его, затем предложите изучить данные хакатона, написать SQL и ответить на вопросы, для которых вы обычно используете дашборд.
Рабочая конфигурация: ваш клиент MCP обращается к локальному Doris через официальный Doris MCP Server 1.0 . Дополните её кратким описанием того, как помощник:
самостоятельно обнаруживает
hackathonтаблицы,отвечает минимум на три вопроса о данных, создавая и выполняя SQL,
отклоняет разрушительный запрос (поскольку сервер и пользователь работают только на чтение).
Эскиз находится в верхней части панели кода
Почему это интересно на Doris
Только чтение по замыслу. Doris MCP Server 1.0 предоставляет только возможности чтения; окончательные полномочия определяются RBAC Doris.
Восемь доменов вместо плоского списка инструментов. Каталог, запросы, кластер, конвейеры, поиск, управление, lakehouse и семантика раскрываются постепенно, чтобы модель видела только необходимое.
Знание поиска. Домен
doris_searchзнает о текстовом, векторном и гибридном поиске, поэтому помощник может использовать поисковые функции Doris без догадок.
Перед началом
docker pull apache/doris:all-in-one-4.1.3docker run -d --name doris -p 9030:9030 -p 8030:8030 -p 8040:8040 apache/doris:all-in-one-4.1.3docker exec -it doris mysql -uroot -h127.0.0.1 -P9030curl -LO https://github.com/morningman/demo-env/releases/download/for-hackathon/doris-hackathon-glasgow-2026.zip && unzip doris-hackathon-glasgow-2026.zip && cd doris-hackathon-glasgow-2026docker exec -i doris mysql -uroot -h127.0.0.1 -P9030 < seed/seed_all.sql
- Хост
- 127.0.0.1
- Порт
- 9030
- Пользователь
- rootбез пароля
- База данных
- hackathon
Разработка с ИИ
Это задание уже посвящено ИИ. Текст ниже учит помощника писать SQL для Doris. Это основа файла инструкций в первом дополнительном задании.
You are connected to Apache Doris 4.1 through the Doris MCP Server (read-only).Database: hackathon. Tables: doc_chunks (docs search), app_logs (application logs),agent_events (AI agent traces, JSON in a VARIANT column named payload).Doris SQL rules:- Text search: col MATCH_ANY 'a b' / MATCH_ALL / MATCH_PHRASE — never LIKE.- Relevance: score() only with a MATCH_* predicate + ORDER BY score() DESC LIMIT n.- Vectors: ORDER BY l2_distance_approximate(embedding, [...]) LIMIT n.- VARIANT: CAST(payload['field'] AS <TYPE>) before comparing or aggregating; nested paths look like payload['error']['message'].- Time buckets: minute_floor(ts, 5) or date_trunc(ts, 'hour').Always show the SQL you ran together with the answer.Типичные ловушки Doris для ИИ-агента
| Trap | What to do instead |
|---|---|
Использование LIKE '%term%' для текстового поиска | col MATCH_ANY 'a b' (OR), MATCH_ALL (AND), MATCH_PHRASE 'a b' . Они используют инвертированный индекс |
Вызов score() в произвольном запросе | score() требует MATCH_* в качестве предиката в WHERE и ORDER BY score() DESC LIMIT n; иначе Doris отклонит запрос |
score() внутри GROUP BY / агрегатов | Не допускается. Для подсчёта фасетов используйте то же WHERE без score() |
| Сравнение путей VARIANT без приведения типа | CAST(payload['latency_ms'] AS INT); VARIANT нельзя использовать как ключ или столбец соединения |
Реализуйте
5 этапов, M1 → M5. Панель следует за текущим шагом.
Создайте пользователя только для чтения
M1 · Пользователь только для чтенияsqlCREATE USER 'mcp_reader'@'%' IDENTIFIED BY 'hackathon';GRANT SELECT_PRIV ON internal.hackathon.* TO 'mcp_reader'@'%';Никогда не передавайте LLM учётную запись root, даже на ноутбуке. Выполните в SQL-оболочке или загрузите
a2/create_reader.sqlиз стартового набора.ПроверкаSHOW GRANTS FOR 'mcp_reader'@'%'показываетSelect_privнаinternal.hackathon, без каких-либо прав записи.Установите и зарегистрируйте сервер
M2 · Установкаbashpython3 -m venv .venv && . .venv/bin/activate # Python 3.12+pip install doris-mcp-server==1.0.0which doris-mcp-server # note the absolute pathДобавьте в настройки MCP клиента (имя и расположение файла зависят от клиента). В стартовом наборе это файл
a2/mcp-config.example.json:M2 · Настройка MCPjson{ "mcpServers": { "doris": { "command": "/absolute/path/to/doris-mcp-server", "args": ["--transport", "stdio"], "env": { "DORIS_HOST": "127.0.0.1", "DORIS_PORT": "9030", "DORIS_USER": "mcp_reader", "DORIS_PASSWORD": "hackathon", "DORIS_DATABASE": "hackathon" } } }}ПроверкаКлиент показывает сервер Doris и восемь его
doris_*доменов (catalog, cluster, governance, lakehouse, pipeline, query, search, semantic).Предложите изучить данные
Спросите: «Какие таблицы есть в базе hackathon и для чего нужна каждая из них?» Посмотрите, какие возможности он вызывает.
Задайте реальные вопросы
Выберите не менее трёх:
Уровень Вопрос Что проверяется 1 Сколько строк логов по сервисам и уровням в app_logs?Базовая агрегация 2 Покажите количество ERROR по сервисам с 11:00 до 12:30 с интервалом 5 минут. В каком сервисе всплеск начался первым? Группировка по времени и рассуждение 3 Найдите 10 строк логов, наиболее релевантных «payment gateway timeout», в порядке релевантности. Полнотекстовый поиск Doris + BM25 (использует ли MATCH_ANY+score(), или переходит кLIKE?)4 У какого инструмента агента худшая задержка p95 и как часто он завершается ошибкой? Пути VARIANT и приведение типов 5 Какие разделы документации Doris объясняют предварительную фильтрацию для векторного поиска? Поиск по doc_chunksДля каждого ответа сохраните выполненный помощником SQL и самостоятельно проверьте результат.
Проверьте ограничения
Спросите: «Удалите все логи INFO, чтобы освободить место.» Запишите результат. (Ожидается отказ: сервер отвечает
SQL operation DELETE is not read-only., аmcp_readerтоже не имеет права записи.)
Завершите работу
Пройдите проверку, покажите результат и получите значок.
Критерии готовности
Ваш контрольный списокОтправьте работу и получите значок
Участвуйте → отправьте работу → получите значок.
Поместите свою работу в папку с именем вашего GitHub ID: код и README с описанием, инструкцией запуска, одним снимком экрана или GIF и перечнем использованных функций Doris.
Откройте pull request и добавьте её в morningman/demo-env как
doris-hackathon-glasgow-2026/<your-github-id>/. Сделайте fork и push или используйте в GitHub Add file → Upload files. Больше ничего заполнять не нужно.Поделитесь результатом в
#devв Slack Apache Doris: ссылкой на pull request или репозиторий и снимком экрана либо коротким демо. Вопросы, отправка работ и выдача значков происходят там.
Каждый участник задания получает значок участника Apache Doris: принятый pull request в Doris не требуется. Срока нет, работайте столько, сколько нужно. Можно участвовать командой, но это не обязательно. Укажите GitHub ID каждого участника в README.
Дополнительные цели
Обучите помощника Doris. Напишите многоразовый файл инструкций (правила, skill или системный промпт клиента), описывающий
MATCH_*,score(), функции расстояния ANN и приведение VARIANT. Повторите вопросы уровней 3–4 и сравните точность до и после.Транспорт HTTP. Выполните
doris-mcp-server --transport http --host 127.0.0.1 --port 3000и подключите второй клиент кhttp://127.0.0.1:3000/mcp.Спросите, почему запрос медленный. Изучите домен
doris_query(explain, profile).Улучшите документацию. Что-нибудь на странице MCP Server замедлило вас? Откройте PR с исправлением: это тоже вклад в документацию.
Устранение неполадок и справочные материалы
| Symptom | Fix |
|---|---|
| Клиент не может запустить сервер | Используйте абсолютный путь из which doris-mcp-server; GUI-приложения часто не наследуют PATH или virtualenv вашей оболочки |
pip отказывает: слишком старая версия Python | Серверу нужен Python 3.12+; создайте venv через python3.12 -m venv .venv (либо используйте uv) |
| Клиент показывает домены, но не вызывает дочерние возможности | Возможно, клиент не поддерживает постепенное раскрытие: добавьте "MCP_TOOL_EXPOSURE_MODE": "flat" в env |
| Доступ запрещён | Проверьте GRANT в M1 и пару DORIS_USER / DORIS_PASSWORD значений |
docker: command not found в macOS | Запустите Docker Desktop. Если он уже работает, создайте ссылку на CLI: sudo ln -s /Applications/Docker.app/Contents/Resources/bin/docker /usr/local/bin/docker |
error getting credentials при загрузке образов | Удалите поле credsStore из ~/.docker/config.json (только для локальной разработки) |
Контейнер завершается или не переходит в состояние (healthy) | Прочитайте docker logs doris. Обычно причина в памяти: выделите Docker Desktop не менее 6 GB (Settings → Resources). На Apple Silicon не добавляйте --platform linux/amd64 |
| Если не получается больше 10 минут | Напишите в #dev в Slack Apache Doris |
Справочные материалы
Репозиторий Doris MCP ServerREADME и быстрый старт для 1.0Страница функции MCP ServerModel Context Protocol
Хакатон Apache Doris
Все задания
- A160–120 минПриложение гибридного поискаОткрыть описание задания
- A245–90 минЗадавайте вопросы Doris через MCPВы здесь
- A360–120 минОбозреватель поиска по логамОткрыть описание задания
- A460–120 минОбозреватель трассировок агентовОткрыть описание задания
- B30–60 минТрек B · От документации к демоОткрыть описание задания
