КурсХакатон Apache DorisЗадания в своём темпе · начните в любое время · без регистрации

Трек A · Задание A2

Спросите Doris через MCP

Подключите Doris к привычному ИИ-помощнику и получайте ответы на реальные вопросы с помощью настоящего SQL.

  • 45–90 мин
  • Для начинающих
  • Python 3.12+ · любой клиент MCP
  • ИИ-инструменты приветствуются

Нужна помощь? Спросите в #dev в Slack Apache Doris. Разработчики и другие участники помогут вам.

1

Подготовка

Что вы создаёте, почему Doris упрощает задачу и как запустить кластер.

Что вы создадите

Превратите своего ИИ-помощника в аналитика данных Doris.

Apache Doris MCP Server открывает доступ к кластеру любому помощнику с поддержкой MCP. Подключите его, затем предложите изучить данные хакатона, написать SQL и ответить на вопросы, для которых вы обычно используете дашборд.

Рабочая конфигурация: ваш клиент MCP обращается к локальному Doris через официальный Doris MCP Server 1.0 . Дополните её кратким описанием того, как помощник:

  1. самостоятельно обнаруживает hackathon таблицы,

  2. отвечает минимум на три вопроса о данных, создавая и выполняя SQL,

  3. отклоняет разрушительный запрос (поскольку сервер и пользователь работают только на чтение).

ЭскизЧто вы создадите · схема интерфейса, не снимок экрана

Эскиз находится в верхней части панели кода

Почему это интересно на Doris

  • Только чтение по замыслу. Doris MCP Server 1.0 предоставляет только возможности чтения; окончательные полномочия определяются RBAC Doris.

  • Восемь доменов вместо плоского списка инструментов. Каталог, запросы, кластер, конвейеры, поиск, управление, lakehouse и семантика раскрываются постепенно, чтобы модель видела только необходимое.

  • Знание поиска. Домен doris_search знает о текстовом, векторном и гибридном поиске, поэтому помощник может использовать поисковые функции Doris без догадок.

Перед началом

  • docker pull apache/doris:all-in-one-4.1.3
  • docker run -d --name doris -p 9030:9030 -p 8030:8030 -p 8040:8040 apache/doris:all-in-one-4.1.3
  • docker exec -it doris mysql -uroot -h127.0.0.1 -P9030
  • curl -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-2026
  • docker 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 для ИИ-агента

TrapWhat 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 нельзя использовать как ключ или столбец соединения
2

Реализуйте

5 этапов, M1 → M5. Панель следует за текущим шагом.

  1. Этап 15 мин

    Создайте пользователя только для чтения

    M1 · Пользователь только для чтенияsql
    CREATE 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, без каких-либо прав записи.

  2. Этап 215 мин

    Установите и зарегистрируйте сервер

    M2 · Установкаbash
    python3 -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).

  3. Этап 310 мин

    Предложите изучить данные

    Спросите: «Какие таблицы есть в базе hackathon и для чего нужна каждая из них?» Посмотрите, какие возможности он вызывает.

  4. Этап 420–40 мин

    Задайте реальные вопросы

    Выберите не менее трёх:

    УровеньВопросЧто проверяется
    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 и самостоятельно проверьте результат.

  5. Этап 55 мин

    Проверьте ограничения

    Спросите: «Удалите все логи INFO, чтобы освободить место.» Запишите результат. (Ожидается отказ: сервер отвечает SQL operation DELETE is not read-only., а mcp_reader тоже не имеет права записи.)

3

Завершите работу

Пройдите проверку, покажите результат и получите значок.

Критерии готовности

Ваш контрольный список

Отправьте работу и получите значок

Участвуйте → отправьте работу → получите значок.

  1. Поместите свою работу в папку с именем вашего GitHub ID: код и README с описанием, инструкцией запуска, одним снимком экрана или GIF и перечнем использованных функций Doris.

  2. Откройте pull request и добавьте её в morningman/demo-env как doris-hackathon-glasgow-2026/<your-github-id>/. Сделайте fork и push или используйте в GitHub Add file → Upload files. Больше ничего заполнять не нужно.

  3. Поделитесь результатом в #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 с исправлением: это тоже вклад в документацию.

Устранение неполадок и справочные материалы

SymptomFix
Клиент не может запустить серверИспользуйте абсолютный путь из 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

Все задания

Вернуться к курсу
  1. A160–120 минПриложение гибридного поискаОткрыть описание задания
  2. A245–90 минЗадавайте вопросы Doris через MCPВы здесь
  3. A360–120 минОбозреватель поиска по логамОткрыть описание задания
  4. A460–120 минОбозреватель трассировок агентовОткрыть описание задания
  5. B30–60 минТрек B · От документации к демоОткрыть описание задания