コースApache Doris Hackathon自分のペースで進めるタスク · いつでも開始 · 登録不要

トラック A · タスク A2

Doris に質問 MCP を使って

普段使う AI アシスタントに Doris を接続し、実際の SQL で実際の質問に答えられるようにします。

  • 45~90 分
  • 初心者向け
  • Python 3.12+ · MCP クライアントは自由
  • AI ツールの利用歓迎

困ったときは? 質問はこちら: #dev 参加先: Apache Doris Slack。メンテナーやほかの参加者がサポートします。

1

環境を準備

何を作るか、Doris ならどう簡単になるかを学び、クラスターを起動します。

作成するもの

AI アシスタントを Doris のデータアナリストに。

Apache Doris MCP Server を使うと、MCP 対応のアシスタントからクラスターを利用できます。接続後、ハッカソンのデータを調べ、SQL を書き、通常はダッシュボードで調べる質問に回答させてみましょう。

動作する構成を作ります。ご自身の MCP クライアントからローカルの Doris に、公式の次を介して接続します: Doris MCP Server 1.0 。さらに、アシスタントが次を行う様子を短くまとめます:

  1. 自力で次を発見: hackathon テーブルを探索する。

  2. SQL を作成・実行し、少なくとも 3 つのデータに関する質問に回答する。

  3. 破壊的な要求を拒否する(サーバーとユーザーが読み取り専用であるため)。

概略図作成するもの · ワイヤーフレーム(スクリーンショットではありません)

概略図はコードパネルの上部にあります

Doris で取り組む利点

  • 設計上、読み取り専用。 Doris MCP Server 1.0 が公開するのは読み取り専用の機能だけです。最終的な権限判断は Doris の RBAC が行います。

  • 機能を羅列せず、8 つのドメインに整理。 カタログ、クエリ、クラスター、パイプライン、 検索、ガバナンス、レイクハウス、セマンティックのドメインを段階的に公開し、モデルに必要なものだけを見せます。

  • 検索機能を理解。 対象の 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

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 の落とし穴

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'@'%';

    ノート PC 上でも、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 · 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)が表示されます。

  3. マイルストーン 310 分

    探索させる

    質問: 「hackathon データベースにはどのようなテーブルがあり、それぞれ何に使いますか?」 どの機能が呼び出されるかを観察してください。

  4. マイルストーン 420~40 分

    実際の質問をする

    少なくとも 3 つを選びます:

    レベル質問確認する内容
    1サービス別・レベル別のログ件数を調べます。対象: app_logs?基本的な集約
    211:00 から 12:30 までのサービスごとの ERROR 件数を 5 分単位で表示してください。最初に急増したサービスはどれですか?時間バケットと推論
    3「payment gateway timeout」に最も関連するログを 10 行、関連度順で探してください。Doris の全文検索 + BM25(使用する関数: MATCH_ANY + score()、または次にフォールバック: LIKE?)
    4p95 レイテンシが最も大きいエージェントツールはどれで、どのくらいの頻度で失敗しますか?VARIANT のパスとキャスト
    5ベクトル検索の事前フィルターを説明している Doris ドキュメントのセクションはどれですか?検索対象: doc_chunks

    各回答について、アシスタントが実行した SQL を保存し、結果を自分で確認してください。

  5. マイルストーン 55 分

    制限を試す

    質問: 「容量を空けるために INFO ログをすべて削除してください。」 何が起きるか記録します(期待する結果:拒否。サーバーの応答: SQL operation DELETE is not read-only.、かつ mcp_reader にも書き込み権限はありません)。

3

完成させる

チェックを済ませ、成果を共有し、バッジを獲得しましょう。

完了条件

チェックリスト

提出してバッジを獲得

参加 → 提出 → バッジを獲得。

  1. 成果物は次の名前のフォルダーにまとめてください: ご自身の GitHub ID。コードと README を含め、README に内容、実行方法、スクリーンショットまたは GIF 1 点、使用した Doris の機能を記載します。

  2. プルリクエストを作成 次の場所に追加してください: morningman/demo-env 配置先: doris-hackathon-glasgow-2026/<your-github-id>/。フォークして push するか、GitHub の次の操作を使ってください: Add file → Upload files。ほかに入力する項目はありません。

  3. 共有する 共有先: #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 を作成してください。それもドキュメントへの貢献です。

トラブルシューティングと参考資料

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 参加先: Apache Doris Slack

参考資料

Doris MCP Server リポジトリ1.0 の README とクイックスタートMCP Server 機能ページModel Context Protocol

Apache Doris Hackathon

すべてのタスク

コースに戻る
  1. A160~120 分ハイブリッド検索アプリ課題の概要を開く
  2. A245~90 分MCP で Doris に質問現在位置
  3. A360~120 分ログ検索エクスプローラー課題の概要を開く
  4. A460~120 分エージェントトレースエクスプローラー課題の概要を開く
  5. B30~60 分トラック B · ドキュメントからデモへ課題の概要を開く