跳到主要内容

SQL 窗口(Milvus)

NineData SQL 窗口支持 Milvus 向量数据库,通过封装行业标准的 MySQL 语法,提供面向向量数据库的 SQL 扩展能力。开发人员无需学习特定 API,可直接使用熟悉的 SQL 语法实现向量数据管理、相似性检索等操作,大幅降低技术门槛。

背景信息​

Milvus 是由 Zilliz 公司开发的开源向量数据库,专为解决人工智能时代非结构化数据处理难题而设计。Milvus 面向 AI 应用的新一代基础设施,广泛应用于 AI 推理、语义搜索等场景。

尽管 Milvus 具备强大的技术能力,但其原生接口存在显著使用门槛。NineData 针对 Milvus 的使用痛点,封装了 MySQL 语法,开发者可直接通过熟悉的 SQL 语法实现 Milvus 的全量功能。

前提条件​

  • 已将目标需要管理的数据库添加到 NineData。如何添加,请参见管理数据源。Milvus 版本为 2.3、2.4、2.5,实例类型为阿里云托管版 Milvus。

  • 在组织模式(数据库 DevOps 企业版)下,您必须拥有目标数据源的只读、DML 或 DDL 权限。

    提示

    只读权限仅支持查询操作。

  • 在商业化版本下(数据库 DevOps 专业版、数据库 DevOps 企业版),请确保您的包年包月订阅未过期,否则将无法正常使用数据库 DevOps 服务。您可以在 NineData 控制台页面右上方快速查看剩余配额以及到期时间。check_quota

操作步骤​

  1. 登录 NineData 控制台。

  2. 在左侧导航栏单击 数据库 DevOps > SQL 窗口。

    提示

    如果之前登录过数据源且没有关闭,则会自动进入该数据源页面。

  3. 单击 SQL 窗口下方文本框,会弹出可用的数据源,单击目标数据源,并单击开始查询,跳转到 SQL 窗口。

    提示
    • 如果您之前没有创建过数据源,则会显示空白页。此时,请单击页面中的创建数据源。
    • 如果有多个数据源,您可以在框中输入全部或部分关键词进行精确查找或模糊查找。支持搜索的字段如下:

      • 数据源名称

      • IP 地址

      search_milvus

  4. 打开 SQL 窗口后,即可对数据源执行数据开发操作。SQL 窗口的详细使用方法,请参见界面说明。

界面说明​

milvus_interface

序号
功能
介绍
1SQL 窗口页签表示当前已打开的数据源 SQL 窗口,多个 SQL 窗口可以通过单击页签切换,单击页签右侧的X可以关闭该 SQL 窗口;双击页签可以更改页签的名称;拖动页签可以调整页签的位置。右键菜单支持如下操作:
  • 实例详情:打开当前数据源详情窗口。
  • 标签重命名:更改当前标签的名称。
  • 复制查询:打开一个当前数据源的 SQL 窗口。
  • 创建新查询:打开一个新的数据源 SQL 窗口。
  • 关闭窗口:关闭当前 SQL 窗口。
  • 关闭其他窗口:关闭除了当前 SQL 窗口以外的所有其他 SQL 窗口。
  • 关闭左侧所有窗口:关闭位于当前 SQL 窗口左侧的所有 SQL 窗口。
  • 关闭右侧所有窗口:关闭位于当前 SQL 窗口右侧的所有 SQL 窗口。
  • 关闭所有:关闭所有 SQL 窗口。
2打开数据源选择并打开新的数据源 SQL 窗口。
3数据源信息展示当前 SQL 窗口的数据源信息,包含环境、IP 地址以及端口号。
右键菜单:
  • 实例详情:显示当前数据源的详情信息,包含用户名、连接地址等。
  • 复制查询:打开一个当前数据源的 SQL 窗口。
  • 刷新:刷新数据源信息。
4收藏|刷新
  • 收藏:单击收藏图标可以将当前数据源添加到我的收藏中,添加后可以在新建 SQL 窗口中快速选择。
  • 刷新:可刷新当前数据源中的数据。
5数据库名称选中目标数据库以执行 SQL 操作。
6功能按钮
  • execute:执行 执行选中的 SQL 语句。
  • format:格式化:调整选中 SQL 语句的结构,增强可读性。
  • collect:收藏 SQL:将当前 SQL 窗口中的所有 SQL 语句保存至 SQL 列表,方便下次使用。
  • sqlfile:收藏夹:查看已保存的 SQL,您可以将目标 SQL 插入至当前的 SQL 窗口中。同时可以编辑或删除目标 SQL。
  • sqlhistory:执行历史:查看目标数据源的 SQL 的执行历史。您可以选择日期过滤出某个时间段的执行历史,也可以通过关键词(SQL 语句、数据库名称、错误提示)搜索执行历史。
  • setting02:设置
    • 结果集:可选覆盖或追加。
      • 覆盖(默认):新的结果集将覆盖上一次的执行结果。
      • 追加:生成新的页签展示新的结果集。
    • 主题:更改 SQL 窗口的主题,可选浅色和深色。
    • 字体大小:拖动滑块调整 SQL 窗口中 SQL 语句的字体大小,默认值如下:
      • Windows:16
      • MacOS:13
  • admin:开启管理员模式|退出管理员模式 仅系统管理员可操作,开启该模式后,SQL 窗口中执行的所有 SQL 不受规范或审批流的限制,均可直接执行。
  • expend:全屏 将 SQL 窗口以全屏方式显示(浏览器大小)。全屏后,单击右上角的compress 退出全屏可以恢复到原始 SQL 窗口大小。
7数据库对象树以树的形式展示当前 Milvus 中的所有库、表、列等对象。您可以做如下操作:
  • 查询表数据:右键单击目标表,单击查询表数据,可自动查询该表中的数据,默认返回 10 行。
  • 复制查询:右键单击任意对象,单击复制查询,可以为当前数据源新开一个 SQL 窗口页签。
  • 刷新:右键单击任意对象,单击刷新,刷新索引列表。
8工作空间占位。
9编辑器窗口支持如下功能:
  • SQL 执行:支持单个语句或批量执行。
  • 中断执行:SQL 执行过程中可以单击停止查询中断 SQL 的执行。
  • 语法高亮:以不同颜色显示不同语法元素,提高代码的可读性。
  • SQL 智能提示:输入命令过程中根据您输入的语义自动弹出提示。
  • 查看 SQL 语法帮助:输入 SQL 关键字后,选中该关键字并单击鼠标右键 > 帮助,即可查看该关键字对应的帮助信息。
  • 右键菜单:
    • 执行:执行光标所在位置的 SQL 语句。
    • 格式化:调整选中 SQL 语句的结构,增强可读性。
    • 收藏 SQL:将当前 SQL 窗口中的所有 SQL 语句保存至 SQL 列表,方便下次使用。
    • 收藏夹:查看已保存的 SQL,您可以将目标 SQL 插入至当前的 SQL 窗口中。同时可以编辑或删除目标 SQL。
    • 执行历史:查看目标数据源的 SQL 的执行历史。您可以选择日期过滤出某个时间段的执行历史,也可以通过关键词(SQL 语句、数据库名称、错误提示)搜索执行历史。
    • 常规操作:包括剪切、复制、粘贴和全选。
    • 选中当前 SQL:选中光标所在位置的 SQL 语句。
    • 帮助:提供目标 SQL 语法的语义、目标表的表结构定义、SQL 语句逻辑的整体解释等信息。
10执行信息、结果集显示命令的执行信息以及结果集。
  • 执行信息:包含执行时间、执行耗时、执行的命令、执行详情等信息。
  • 结果集:显示命令的返回结果,以 JSON 格式显示。将鼠标悬浮在目标结果集的页签上,将显示该结果集对应的命令。

附件一:SQL 语法设计​

DDL

类别命令语法
数据库操作创建数据库CREATE DATABASE <库名>
删除数据库DROP DATABASE <库名>
表操作创建表CREATE TABLE <表名>(
<主键名><数据类型> PRIMARY KEY,
<列名><数据类型>(<长度>) [PROPS 属性][NOT NULL|NULL][comment '注释'],
INDEX <索引名称>(<列名>) [PROPS 属性]
)
修改表属性ALTER TABLE <表名> SET PROPS(<表属性>)
重命名表RENAME TABLE <表名> TO <新表名>
删除表DROP TABLE <表名>
加载表LOAD TABLE <表名>
卸载表RELEASE TABLE <表名>
索引操作创建索引CREATE INDEX <索引名> ON <表名>(<列名>) PROPS(<属性>)
删除索引DROP INDEX <索引名> ON <表名>
别名操作创建别名CREATE ALIAS <别名> FOR <表名>
删除别名DROP ALIAS <别名>

示例:

--创建简单表
create table t1(
id bigint primary key, -- 主键列
vector vector(3), -- 3 维浮点向量
name varchar(32), -- 短文本字段
age int, -- 数值字段
index idx1(vector) props( -- HNSW向量索引
index_type=HNSW, -- 索引类型
M=16, -- 层间连接数
metric_type=COSINE, -- 相似度计算方式
efConstruction=128), -- 构建参数
index idx2(age)
);

--创建复杂表
create table t2 (
id bigint primary key,
c2 int64 props(is_partition_key=true) not null, -- 分区键
c3 float null comment 'abc',
c4 double comment 'c4 column comment',
c5 vector(32), -- 标准浮点向量
c6 int[45], -- 定长数组
c7 json, -- JSON文档
c8 varchar(2541) default 'abc',
c9 varchar(10)[21],
c10 float[32],
c11 binary_vector(128), -- 二进制向量
c12 sparse_float_vector(128), -- 稀疏向量
c14 int8,
c15 int16,
c16 int32,
c17 varchar(256) comment '字符串测试',
c18 vector(32),
index idx1(c3),
index idx2(c2) props(type=autoindex),
index idx3(c5) props(type=ivf_flat,nlist=10,metric_type=COSINE), -- IVF_FLAT向量索引
index idx4(c11) props(type=BIN_IVF_FLAT,nlist=10,metric_type=HAMMING), -- 二进制向量索引
index idx5(c12) props(type=SPARSE_INVERTED_Index,metric_type=IP),
index idx6(c18) props(type=HNSW,M=31,metric_type=L2,efConstruction=124),
index idx7(c8) props(type=inverted),
index idx8(c14) props(type=bitmap),
index idx9(c15) props(type=STL_SORT),
index idx10(c17) props(type=Trie)
) comment='test table' props(
enable_dynamic_field=true, -- 允许动态字段
collection.ttl.seconds=3600, -- 数据自动过期时间
ABC=234);

DML

类别命令语法示例
数据插入插入单条数据INSERT INTO <表名> (<列名 1>,<列名 2>) VALUES (<值 1>,<值 2>)
插入多条数据INSERT INTO <表名> (<列名 1>,<列名 2>) VALUES (<值 1>,<值 2>),(<值 3>,<值 4>)
通过 SET 插入INSERT INTO <表名> SET <列名 1>=<值 1>, <列名 2>=<值 2>
数据替换替换数据REPLACE INTO <表名> (<列名 1>,<列名 2>) VALUES (<值 1>,<值 2>)
数据删除按条件删除DELETE FROM <表名> WHERE <条件语句>

DQL

类别命令/功能语法示例
基础查询查看数据库SHOW DATABASES
查看表SHOW TABLES
全表查询SELECT * FROM <表名>
条件过滤SELECT * FROM <表名> WHERE <列名 1> IN (1,2,3)
分页查询SELECT * FROM <表名> LIMIT 10 OFFSET 20
向量检索单向量搜索SELECT * FROM <表名> ORDER BY vector_search(<向量列名>, [1.0,2.0,3.0])
带参数向量搜索SELECT * FROM <表名> ORDER BY vector_search((<向量列名>, [1.0,2.0], nlist=10, metric_type=COSINE)
结合过滤条件SELECT * FROM <表名> WHERE filter='id>0' ORDER BY vector_search(<向量列名>, [1.0,2.0,3.0])
聚合与分组分组检索SELECT * FROM <表名> GROUP BY <列名> PROPS(group_size=3)

示例:

--普通查询
select * from table_name
select id,c1 from table_name where id=1
select * from table_name where id in (1,2)
select * from table_name where id in (1,2,3) limit 10
select * from table_name where id in (1,2,3) limit 10,20
select * from table_name where filter='id==3' limit 10
select * from table_name where filter='id in [1,2,8]' limit 10 offset 20
select * from table_name where filter='age>15 and age<81' limit 10,20
select * from table_name where filter='TEXT_MATCH(text, \'test deep\') and id>0';

select * from t123 where id in (14641243,88282101)
and filter='id>0 and name like "beyond%"'
limit 2;

--向量查询
select * from table_name
order by vector_search(column_name,{vector_value})
limit 10

select id,text from table_name
order by vector_search(column_name,{vector_value},nlist=10,param2=2)
limit 10

select id,text from table_name
where filter='id>0'
order by vector_search(column_name,{vector_value},nlist=10,radius=0.4,range_filter=0.6)
limit 10

select * from t123 where filter='id>0'
group by docId
order by vector_search(vector,[1,2,1])
props(group_size=3,strict_group_size=false)

select * from products
order by vector_search(embedding('男士','text-embedding-v3',64))
limit 10
select embedding('男士','text-embedding-v3',64)

权限控制

类别命令语法示例
角色管理查看角色SHOW ROLES
创建角色CREATE ROLE <角色名称>
授权角色GRANT <权限> ON <范围> TO <角色名称>
撤销权限REVOKE <权限> ON <范围> FROM <角色名称>
用户管理查看用户SHOW USERS
创建用户CREATE USER <用户名称> IDENTIFIED BY '<密码>'
绑定角色GRANT <权限>, <角色名称> TO <用户名称>

示例:

-- 角色管理示例
create role role1; -- 创建角色 role1
grant CreateDatabase,DropDatabase on Global to role1; -- 将创建数据库、删除数据库的权限在全局范围内授权给 role1
grant Delete,Insert on Colleciton to role1; -- 将删除、插入权限在集合范围内授权给 role1
revoke Delete on Colleciton from role1; -- 撤销 role1 在集合中的删除权限
-- 用户管理示例
create user user1 identified by 'abc123'; -- 创建名为 user1 的用户,密码为 abc123
grant admin,role1 to user1; -- 将管理员角色,以及 role1 角色绑定给 user1
desc user user1; -- 显示用户 user1 拥有的所有角色
desc role role1; -- 显示角色 role1 拥有的是所有权限

附件二:函数语法表​

函数名函数作用参数定义使用示例
VECTOR_SEARCH执行向量相似度计算,用于检索时的排序。返回结果包含 score 字段,代表匹配程度。
  • column_name (String): 向量字段名
  • vector (Float[]): 待匹配向量值
  • [params] (Key=Value): 自定义参数
SELECT * FROM <表名> ORDER BY vector_search(vector_col, [0.1,0.2,0.3], nlist=10)
EMBED
EMBEDDING
将文本转换为向量
  • text (String): 输入文本
  • model (String): 模型名(如 text-embedding-v3)
  • dimension (Int): 向量维度
  • [encoding_format] (String): 输出格式(默认 float)
INSERT INTO t1 VALUES (1, 'text', embed('男士', 'text-embedding-v3', 64))
VERSION返回数据库版本信息无参数SELECT VERSION()