analyticdb-mysql-cli命令行工具

更新时间:
复制为 MD 格式

analyticdb-mysql-cli是专为云原生数据仓库 AnalyticDB MySQL 版设计的命令行工具,支持结构化JSON输出、Schema探索、数据画像和关系推断等功能,适用于AI Agent与数据库交互场景。

简介

MCP(Model Context Protocol)、Function Calling等技术日益普及的背景下,AI Agent需要通过工具调用来完成数据库查询等实际任务。

传统的数据库CLI工具存在以下局限:

  • 输出解析困难:传统CLIASCII表格或美化输出,需要复杂的正则表达式才能解析。

  • 错误处理模糊:错误信息格式不统一,难以程序化判断错误类型。

  • 安全防护缺失:AI可能生成危险的SQL(如无WHEREDELETE),缺乏有效拦截。

  • 元数据获取复杂:了解数据库结构需要多次查询系统表。

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提供以下常用命令:

命令

说明

analyticdb-mysql-cli status

查看连接状态与版本。

analyticdb-mysql-cli schema tables

列出所有表。

analyticdb-mysql-cli schema describe <table>

查看表结构(列、类型、索引)。

analyticdb-mysql-cli schema dump

输出所有表的DDL。

analyticdb-mysql-cli table profile <table>

查看表数据画像(行数、空值、distinct、min/max、候选JOIN键与时间列)。

analyticdb-mysql-cli sql "<stmt>"

执行SQL(只读默认;加--write允许写;--with-schema附带表schema;--no-truncate不截断大字段)。

analyticdb-mysql-cli relations infer [--table <t>]

推断表间JOIN关系。

analyticdb-mysql-cli ai-guide

输出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的分析流程如下。

  1. 获取表概览

    analyticdb-mysql-cli schema tables
    # 发现有 e_orders、e_order_items、e_products 等 5 张表
  2. 查看订单表结构和数据画像

    analyticdb-mysql-cli table profile e_orders
    # 了解到有 800 笔订单,status 有 4 种取值
  3. 推断表关系

    analyticdb-mysql-cli relations infer
    # 发现订单与用户、商品的关联关系
  4. 执行多维度分析查询

    基于获取的元数据,可以执行以下分析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

202411出现销售高峰(双十一效应),销售额达 ¥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无需人工干预,通过结构化的元数据自主完成了从理解数据结构到执行分析、生成报告的全过程。