阿里云 AnalyticDB 只读数据分析
连接阿里云 AnalyticDB for MySQL 实例(或 DMS 代理),提供只读数据分析能力。多 Profile 管理、SQL 安全拦截、交叉验证、Schema 文档自动生成。仅依赖 pymysql。
FEATURES
支持多个 ADB 实例(或 DMS 代理)配置。一键切换 Profile,凭据加密存储在 ~/.adb-mysql/profiles.json(权限 0600)。
正则拦截所有写入操作(INSERT/UPDATE/DELETE/DROP 等),自动添加 LIMIT 200,检测 SELECT * 和缺少 WHERE 的危险查询。
每次分析自动执行多维验证:总行数校验、随机样本抽查、数值统计比对、时间范围确认。确保数据分析结论可信。
为所有表自动生成 Markdown 文档(字段定义、索引、ADB 分布键、示例查询),Agent 首次分析前读取作为上下文。
查询结果支持 table / csv / json 三种输出格式,直接对接 Agent 后续处理或导出到文件。
同时支持直连 ADB 实例和通过阿里云 DMS 代理连接,使用 pymysql 纯 Python 驱动,无需本地 MySQL 客户端。
REFERENCE
多 Profile 连接配置与切换
| 命令 | 说明 | 示例 |
|---|---|---|
add | 添加连接 Profile | ./adb config add prod --host xxx --user id --password secret --database mydb --test |
list | 列出所有 Profile | ./adb config list |
use | 切换默认 Profile | ./adb config use staging |
test | 测试连接 | ./adb config test prod |
remove | 删除 Profile | ./adb config remove old-prod |
只读查询,自动限制 200 条
| 命令 | 说明 | 示例 |
|---|---|---|
直接查询 | 内联 SQL | ./adb query "SELECT * FROM users LIMIT 10" |
-d | 指定数据库 | ./adb query -d mydb "SELECT COUNT(*) FROM orders" |
-f | 从文件读取 SQL | ./adb query -f report.sql --format csv |
-p | 指定 Profile | ./adb query -p staging "SELECT 1" |
--format | 输出格式 | ./adb query "SELECT 1" --format json |
多维分析 + 交叉验证
| 命令 | 说明 | 示例 |
|---|---|---|
-c | 计数分析 | ./adb analyze -t orders -c |
-g + -a | 聚合分析 | ./adb analyze -t orders -g status -a "SUM(amount)" |
--time-col | 时间序列分析 | ./adb analyze -t orders --time-col created_at --start-date 2024-01-01 |
自动生成 Markdown 表结构文档
| 命令 | 说明 | 示例 |
|---|---|---|
默认输出 | 生成到 ~/.adb-mysql/schema/ | ./adb schema mydb |
-o | 自定义输出目录 | ./adb schema mydb -o ./docs/schema |
对 Agent 说"连接我的 ADB 实例",Agent 引导完成 Profile 配置并验证连接:
> "帮我连接 ADB 数据库 mydb"
Agent 执行:
1. ./adb config add prod --host xxx --user id --password secret --database mydb --test
2. 连接成功后自动运行 ./adb schema mydb 生成表结构文档
3. 后续分析时 Agent 读取 Schema 文档作为上下文对 Agent 说"分析一下上个月的订单数据",Agent 自动选择合适的分析方式:
> "分析上个月各状态的订单金额"
Agent 执行:
./adb analyze -t orders -g status -a "SUM(amount)" \
--time-col created_at --start-date 2024-01-01 --end-date 2024-02-01每次分析自动执行交叉验证,确保结论可信。
./adb query -f complex_report.sql --format csv > report.csv| 策略 | 说明 |
|---|---|
| 只读拦截 | 正则检测 INSERT / UPDATE / DELETE / DROP / CREATE / ALTER / TRUNCATE |
| 行数限制 | 自动添加 LIMIT 200,超出自动截断 |
| 性能警告 | 检测 SELECT *、缺少 WHERE、JOIN 无 ON 条件 |
| 凭据安全 | 配置文件权限 0600,密码不出现在命令行参数 |
adb (Bash CLI 入口)
│
├── config → config.py 多 Profile 连接管理 (add/list/use/test/remove)
├── query → query.py SQL 只读查询 (table/csv/json 输出)
├── analyze → analyze.py 多维分析 + 交叉验证
└── schema → schema.py Schema 文档生成 (Markdown)
↓
adb_core.py 核心引擎 (pymysql 连接 + SQL 安全 + 输出格式化)
↓
~/.adb-mysql/
├── profiles.json 连接配置
└── schema/ Schema 文档输出pip install pymysql仅依赖 pymysql(纯 Python MySQL 驱动),无需本地 mysql 客户端。
INSTALL