トラック A · タスク A2
Doris に質問 MCP を使って
普段使う AI アシスタントに Doris を接続し、実際の SQL で実際の質問に答えられるようにします。
- 45~90 分
- 初心者向け
- Python 3.12+ · MCP クライアントは自由
- AI ツールの利用歓迎
困ったときは? 質問はこちら: #dev 参加先: Apache Doris Slack。メンテナーやほかの参加者がサポートします。
環境を準備
何を作るか、Doris ならどう簡単になるかを学び、クラスターを起動します。
作成するもの
AI アシスタントを Doris のデータアナリストに。
Apache Doris MCP Server を使うと、MCP 対応のアシスタントからクラスターを利用できます。接続後、ハッカソンのデータを調べ、SQL を書き、通常はダッシュボードで調べる質問に回答させてみましょう。
動作する構成を作ります。ご自身の MCP クライアントからローカルの Doris に、公式の次を介して接続します: Doris MCP Server 1.0 。さらに、アシスタントが次を行う様子を短くまとめます:
自力で次を発見:
hackathonテーブルを探索する。SQL を作成・実行し、少なくとも 3 つのデータに関する質問に回答する。
破壊的な要求を拒否する(サーバーとユーザーが読み取り専用であるため)。
概略図はコードパネルの上部にあります
Doris で取り組む利点
設計上、読み取り専用。 Doris MCP Server 1.0 が公開するのは読み取り専用の機能だけです。最終的な権限判断は Doris の RBAC が行います。
機能を羅列せず、8 つのドメインに整理。 カタログ、クエリ、クラスター、パイプライン、 検索、ガバナンス、レイクハウス、セマンティックのドメインを段階的に公開し、モデルに必要なものだけを見せます。
検索機能を理解。 対象の
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
AI を使って作る
このタスク自体が AI を使うタスクです。 以下の文章で、アシスタントに Doris SQL を教えます。最初の追加課題で作成する指示ファイルの出発点として使えます。
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.AI エージェントが陥りやすい 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'@'%';ノート PC 上でも、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 · MCP 設定json{ "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 サーバーと 8 つの
doris_*ドメイン(catalog、cluster、governance、lakehouse、pipeline、query、search、semantic)が表示されます。探索させる
質問: 「hackathon データベースにはどのようなテーブルがあり、それぞれ何に使いますか?」 どの機能が呼び出されるかを観察してください。
実際の質問をする
少なくとも 3 つを選びます:
レベル 質問 確認する内容 1 サービス別・レベル別のログ件数を調べます。対象: app_logs?基本的な集約 2 11:00 から 12:30 までのサービスごとの ERROR 件数を 5 分単位で表示してください。最初に急増したサービスはどれですか? 時間バケットと推論 3 「payment gateway timeout」に最も関連するログを 10 行、関連度順で探してください。 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 を含め、README に内容、実行方法、スクリーンショットまたは GIF 1 点、使用した Doris の機能を記載します。
プルリクエストを作成 次の場所に追加してください: morningman/demo-env 配置先:
doris-hackathon-glasgow-2026/<your-github-id>/。フォークして push するか、GitHub の次の操作を使ってください: Add file → Upload files。ほかに入力する項目はありません。共有する 共有先:
#dev参加先: Apache Doris Slack:プルリクエストまたはリポジトリへのリンクと、スクリーンショットまたは短いデモを共有します。質問、提出、バッジの案内はすべてこちらで行います。
タスクに参加した方全員に次のバッジを贈ります: Apache Doris Contributor バッジ。Doris 本体へのプルリクエストがマージされている必要はありません。締め切りはないので、ご自身のペースで進めてください。チーム参加も可能ですが必須ではありません。全員の GitHub ID を次に記載してください: README.
追加の挑戦
アシスタントに Doris を教える。 クライアント用の再利用可能な指示ファイル(ルール、スキル、システムプロンプト)を作成します。内容:
MATCH_*,score()、ANN 距離関数、VARIANT のキャスト。レベル 3~4 の質問をもう一度行い、前後の正確性を比較します。HTTP トランスポート。 実行:
doris-mcp-server --transport http --host 127.0.0.1 --port 3000して、2 つ目のクライアントを次に接続します: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 参加先: Apache Doris Slack |
参考資料
Doris MCP Server リポジトリ1.0 の README とクイックスタートMCP Server 機能ページModel Context Protocol
Apache Doris Hackathon
