analyticdb-mysql-cli命令行工具
analyticdb-mysql-cli是专为云原生数据仓库 AnalyticDB MySQL 版设计的命令行工具,支持结构化JSON输出、Schema探索、数据画像和关系推断等功能,适用于AI Agent与数据库交互场景。
简介
在MCP(Model Context Protocol)、Function Calling等技术日益普及的背景下,AI Agent需要通过工具调用来完成数据库查询等实际任务。
传统的数据库CLI工具存在以下局限:
输出解析困难:传统CLI的ASCII表格或美化输出,需要复杂的正则表达式才能解析。
错误处理模糊:错误信息格式不统一,难以程序化判断错误类型。
安全防护缺失:AI可能生成危险的SQL(如无WHERE的DELETE),缺乏有效拦截。
元数据获取复杂:了解数据库结构需要多次查询系统表。
analyticdb-mysql-cli通过结构化JSON输出、统一错误码、内置安全机制和元数据命令解决上述问题,具备以下特点:
结构化优先:所有输出都是机器可解析的JSON。
元数据丰富:提供表结构、数据画像、关系推断等功能。
安全内置:行数保护、写操作防护、敏感信息脱敏。
工作流清晰:推荐的四步工作流让AI Agent上手即用。
安装与配置
安装analyticdb-mysql-cli命令行工具,环境要求Python 3.11以上版本。开源项目地址,请参见analyticdb-mysql-cli。
安装
从PyPI安装
uv tool install analyticdb-mysql-cli从本地源码安装
cd analyticdb-mysql-cli uv tool install .
安装后可使用adbmysql-cli命令,也可使用analyticdb-mysql-cli作为同一程序的别名。
配置连接
支持--dsn命令行参数、ADBMYSQL_DSN环境变量、项目.env文件等方式配置连接,优先级依次递减。
创建全局配置文件连接AnalyticDB for MySQL 集群,命令如下:
mkdir -p ~/.adbmysql
echo 'ADBMYSQL_DSN="mysql://user:pass@host:port/database"' > ~/.adbmysql/config.env功能概述
analyticdb-mysql-cli提供以下常用命令:
命令 | 说明 |
| 查看连接状态与版本。 |
| 列出所有表。 |
| 查看表结构(列、类型、索引)。 |
| 输出所有表的DDL。 |
| 查看表数据画像(行数、空值、distinct、min/max、候选JOIN键与时间列)。 |
| 执行SQL(只读默认;加 |
| 推断表间JOIN关系。 |
| 输出AI Agent用结构化指南(JSON)。 |
核心功能
结构化JSON输出
analyticdb-mysql-cli所有命令都返回标准化的JSON结构:
// 成功响应
{
"ok": true,
"data": "...",
"time_ms": 123
}
// 错误响应
{
"ok": false,
"error": {
"code": "SQL_ERROR",
"message": "详细错误信息"
}
}AI Agent 可以通过ok字段即可判断执行结果,无需复杂的文本解析。
查看表列表示例:
analyticdb-mysql-cli schema tables返回示例:
{
"ok": true,
"data": [
{"name": "e_categories", "columns": 3, "rows": 15},
{"name": "e_orders", "columns": 6, "rows": 800},
{"name": "e_order_items", "columns": 5, "rows": 1080},
{"name": "e_products", "columns": 6, "rows": 50},
{"name": "e_users", "columns": 6, "rows": 80}
],
"time_ms": 261
}AI Agent可以直接通过JSON.parse()解析结果,获取表名、列数、行数等信息。
Schema探索
analyticdb-mysql-cli提供完整的Schema探索命令,帮助AI Agent理解数据库结构。
查看表结构:
analyticdb-mysql-cli schema describe e_orders返回详细的表结构信息,包括列名、类型、索引等,返回示例:
列名 | 类型 | 说明 |
order_id | bigint | 订单ID(主键) |
user_id | int | 用户ID |
order_date | date | 订单日期 |
total_amount | decimal(12,2) | 订单金额 |
status | varchar | 订单状态 |
payment_method | varchar | 支付方式 |
导出DDL:
analyticdb-mysql-cli schema dump输出所有表的CREATE TABLE语句,方便 AI 理解完整的数据库设计。
数据画像(Table Profile)
table profile命令可以自动分析表的统计特征:
analyticdb-mysql-cli table profile e_orders返回结果包含:
行数统计
空值比例
唯一值数量
取值范围
高频值
候选关联键
时间列
AI Agent可以据此判断应该按什么字段分组、需要处理哪些枚举值等。
关系推断(Relations Infer)
analyticdb-mysql-cli可以自动发现表之间的关联关系:
analyticdb-mysql-cli relations infer返回示例:
{
"data": [
{"from": "e_order_items.order_id", "to": "e_orders.order_id", "confidence": "medium"},
{"from": "e_order_items.product_id", "to": "e_products.product_id", "confidence": "medium"},
{"from": "e_orders.user_id", "to": "e_users.user_id", "confidence": "medium"}
]
}AI Agent无需查阅文档或外键约束,即可理解表间JOIN关系,极大地简化了 AI 生成多表 JOIN 查询的难度。例如,AI Agent通过上述返回示例,即可理解:
订单明细表通过 order_id 关联订单表
订单明细表通过 product_id 关联商品表
订单表通过 user_id 关联用户表
多格式输出
analyticdb-mysql-cli支持多种输出格式:
# 表格格式(适合人类阅读)
analyticdb-mysql-cli --format table sql "SELECT * FROM e_users LIMIT 3"
# CSV格式(适合数据导出)
analyticdb-mysql-cli --format csv sql "SELECT * FROM e_users LIMIT 3"
# JSONL格式(适合流式处理)
analyticdb-mysql-cli --format jsonl sql "SELECT * FROM e_users LIMIT 3"表格格式输出示例:
user_id | username | city | province | register_date | user_level
--------+----------+------+----------+---------------+-----------
46 | 李敏 | 成都 | 四川 | 2024-05-02 | 银卡
60 | 陈涛 | 南昌 | 江西 | 2023-12-28 | 银卡
57 | 李涛 | 厦门 | 福建 | 2023-06-12 | 钻石安全机制
行数保护
当查询没有LIMIT子句时,系统自动探测结果集大小。如果超过1001行,将返回LIMIT_REQUIRED错误,避免一次性拉取海量数据导致内存溢出或网络拥塞。
写操作保护
默认情况下,所有SQL都以只读模式执行。执行INSERT、UPDATE、DELETE等写操作需要显式添加--write参数。不带WHERE子句的DELETE/UPDATE会被直接拦截,防止误删全表数据。
敏感信息脱敏
对于phone、email、password、id_card等敏感字段,analyticdb-mysql-cli会自动进行脱敏处理,避免敏感数据泄露。
推荐工作流
analyticdb-mysql-cli设计了一套标准的AI Agent工作流:
1. analyticdb-mysql-cli schema tables # 了解有哪些表
2. analyticdb-mysql-cli schema describe <表名> # 查看感兴趣的表结构
3. analyticdb-mysql-cli table profile <表名> # 了解数据分布特征
4. analyticdb-mysql-cli sql "SELECT ..." # 执行查询该工作流确保AI Agent在执行查询前充分理解数据库结构,减少因字段名错误、数据类型不匹配导致的查询失败。
实战案例:AI 驱动的销售数据分析
以下以一个电商场景数据库为例,展示analyticdb-mysql-cli如何支持AI Agent进行完整的数据分析流程。
准备测试表及数据
用户表e_users
CREATE TABLE `e_users` ( `user_id` int NOT NULL, `username` varchar(100) NOT NULL, `city` varchar(50) NOT NULL, `province` varchar(50) NOT NULL, `register_date` date NOT NULL, `user_level` varchar(20) NOT NULL, KEY `pk_sys_user_id` (`user_id`), PRIMARY KEY (`user_id`) ) DISTRIBUTE BY HASH(`user_id`) STORAGE_POLICY='HOT' ENGINE='XUANWU_V2';商品分类表e_categories
CREATE TABLE `e_categories` ( `category_id` int NOT NULL, `category_name` varchar(100) NOT NULL, `parent_category_id` int, KEY `pk_sys_category_id` (`category_id`), PRIMARY KEY (`category_id`) ) DISTRIBUTE BY HASH(`category_id`) STORAGE_POLICY='HOT' ENGINE='XUANWU_V2';商品表e_products
CREATE TABLE `e_products` ( `product_id` int NOT NULL, `product_name` varchar(200) NOT NULL, `category_id` int NOT NULL, `price` decimal(10, 2) NOT NULL, `cost` decimal(10, 2) NOT NULL, `created_at` date NOT NULL, KEY `pk_sys_product_id` (`product_id`), PRIMARY KEY (`product_id`) ) DISTRIBUTE BY HASH(`product_id`) STORAGE_POLICY='HOT' ENGINE='XUANWU_V2';订单表e_orders
CREATE TABLE `e_orders` ( `order_id` bigint NOT NULL, `user_id` int NOT NULL, `order_date` date NOT NULL, `total_amount` decimal(12, 2) NOT NULL, `status` varchar(20) NOT NULL, `payment_method` varchar(30) NOT NULL, KEY `pk_sys_order_date` (`order_date`), KEY `pk_sys_order_id` (`order_id`), PRIMARY KEY (`order_id`,`order_date`) ) DISTRIBUTE BY HASH(`order_id`) PARTITION BY VALUE(`DATE_FORMAT(order_date, '%Y')`) STORAGE_POLICY='HOT' ENGINE='XUANWU_V2';订单明细表e_order_items
CREATE TABLE `e_order_items` ( `item_id` bigint NOT NULL, `order_id` bigint NOT NULL, `product_id` int NOT NULL, `quantity` int NOT NULL, `unit_price` decimal(10, 2) NOT NULL, KEY `pk_sys_item_id` (`item_id`), KEY `pk_sys_order_id` (`order_id`), PRIMARY KEY (`order_id`,`item_id`) ) DISTRIBUTE BY HASH(`order_id`) STORAGE_POLICY='HOT' ENGINE='XUANWU_V2';
测试数据,请参见ecommerce_demo.sql。
AI Agent分析流程
以“分析销售数据情况”为场景,AI Agent的分析流程如下。
获取表概览
analyticdb-mysql-cli schema tables # 发现有 e_orders、e_order_items、e_products 等 5 张表查看订单表结构和数据画像
analyticdb-mysql-cli table profile e_orders # 了解到有 800 笔订单,status 有 4 种取值推断表关系
analyticdb-mysql-cli relations infer # 发现订单与用户、商品的关联关系执行多维度分析查询
基于获取的元数据,可以执行以下分析SQL。
整体概况
analyticdb-mysql-cli sql "SELECT COUNT(*) as total_orders, SUM(total_amount) as total_revenue, AVG(total_amount) as avg_order_value, MIN(order_date) as first_order, MAX(order_date) as last_order FROM e_orders"订单状态分布
analyticdb-mysql-cli sql "SELECT status, COUNT(*) as count, SUM(total_amount) as amount FROM e_orders GROUP BY status ORDER BY count DESC"支付方式分析
analyticdb-mysql-cli sql "SELECT payment_method, COUNT(*) as count, SUM(total_amount) as amount FROM e_orders GROUP BY payment_method ORDER BY amount DESC"月度销售趋势
analyticdb-mysql-cli sql "SELECT DATE_FORMAT(order_date, '%Y-%m') as month, COUNT(*) as orders, SUM(total_amount) as revenue FROM e_orders WHERE status='completed' GROUP BY month ORDER BY month DESC LIMIT 12"热销商品TOP 10
analyticdb-mysql-cli sql "SELECT p.product_name, SUM(oi.quantity) as sold_qty, SUM(oi.quantity * oi.unit_price) as revenue FROM e_order_items oi JOIN e_products p ON oi.product_id = p.product_id GROUP BY p.product_id, p.product_name ORDER BY revenue DESC LIMIT 10"
销售数据分析报告
基于上述SQL查询结果,AI Agent自动生成以下分析报告:
整体概况
指标 | 数值 |
订单总数 | 800笔 |
销售总额 | ¥2,379,658.00 |
平均客单价 | ¥2,974.57 |
数据时间范围 | 2023-01-05 ~ 2025-03-15 |
订单状态分布
状态 | 订单数 | 金额 | 占比 |
已完成 | 784 | ¥2,360,524 | 98.0% |
已退款 | 12 | ¥18,278 | 1.5% |
待处理 | 2 | ¥498 | 0.25% |
已取消 | 2 | ¥358 | 0.25% |
订单完成率很高(98%),退款率仅 1.5%,业务运营健康。
支付方式分析
支付方式 | 订单数 | 金额 | 占比 |
信用卡 | 187 | ¥930,713 | 39.1% |
支付宝 | 317 | ¥868,291 | 36.5% |
微信支付 | 292 | ¥571,558 | 24.0% |
银行转账 | 4 | ¥9,096 | 0.4% |
信用卡金额最高,支付宝使用人数最多,可考虑针对不同支付渠道推出优惠活动。
近12个月销售趋势
月份 | 订单数 | 销售额 |
2025-03 | 31 | ¥82,069 |
2025-02 | 33 | ¥106,467 |
2025-01 | 34 | ¥125,666 |
2024-12 | 23 | ¥68,477 |
2024-11 | 76 | ¥438,424 |
2024-10 | 21 | ¥60,479 |
2024-09 | 20 | ¥73,780 |
2024-08 | 20 | ¥45,780 |
2024-07 | 20 | ¥49,880 |
2024-06 | 20 | ¥68,280 |
2024-05 | 20 | ¥45,580 |
2024-04 | 20 | ¥41,880 |
2024年11月出现销售高峰(双十一效应),销售额达 ¥438,424,是平时的 6~8 倍。
热销商品TOP 10
排名 | 商品名称 | 销量 | 销售额 |
1 | iPhone 15 Pro Max 256GB | 30 | ¥299,978 |
2 | iPad Pro 12.9寸 | 29 | ¥260,971 |
3 | 华为 Mate 60 Pro | 36 | ¥251,964 |
4 | OPPO Find X7 | 43 | ¥214,957 |
5 | MacBook Pro 14寸 M3 | 12 | ¥179,988 |
6 | 戴尔 XPS 15 | 14 | ¥167,986 |
7 | 北欧简约沙发 | 42 | ¥167,958 |
8 | 小米 14 Ultra | 27 | ¥161,973 |
9 | 跑步机家用折叠 | 44 | ¥131,956 |
10 | 实木餐桌椅套装 | 46 | ¥119,554 |
电子产品(手机、电脑、平板)是主要收入来源,家居类商品销量也不错。
关键洞察
业务健康:完成率98%,退款率仅1.5%。
高价值商品驱动:平均客单价近¥3000,以高端电子产品为主。
促销效果显著:双十一期间销售额暴增,可加大促销力度。
支付多元化:移动支付(支付宝+微信)占比超60%。
整个分析过程中,AI Agent无需人工干预,通过结构化的元数据自主完成了从理解数据结构到执行分析、生成报告的全过程。