PolarDB 使用 EMBEDDING 查询时报 vector_distance 参数错误怎么办?
结论
这段 SQL 中 EMBEDDING 和 DISTANCE 的调用方式与 PolarDB for MySQL 文档示例一致,单凭报错信息还无法判断具体原因。建议先检查集群内核版本,以及 r.vec 的类型和向量维度。也可以在 ORDER BY 中直接调用 DISTANCE,看看问题是否与排序别名有关。
排查步骤
1. 确认集群版本
PolarDB for MySQL 的 EMBEDDING() 功能要求集群使用 MySQL 8.0.2,且内核小版本不低于 8.0.2.2.31.1。如果当前版本不满足,先确认集群是否支持该功能,再考虑升级或改用应用侧生成向量。
2. 检查 vec 的类型和维度
示例中的 EMBEDDING('ecs server', 'text-embedding-v4', 1024) 会生成 1024 维向量。检查表 r 的 vec 列是否为 PolarDB 支持的向量类型,维度是否也是 1024。可以先查看表定义:
SHOW CREATE TABLE r;
如果列维度与查询向量不一致,应改用维度匹配的向量列或模型。调整 EMBEDDING 的维度参数时,也要考虑已有数据的维度。
3. 将排序表达式写完整
可以先在 ORDER BY 中直接调用 DISTANCE,排除别名的影响:
SET @value = EMBEDDING('ecs server', 'text-embedding-v4', 1024);
SELECT doc, DISTANCE(vec, @value, 'COSINE') AS distance
FROM r
ORDER BY DISTANCE(vec, @value, 'COSINE')
LIMIT 30;
PolarDB 文档也展示了先将 EMBEDDING() 结果存入会话变量,再把变量传给 DISTANCE() 的用法。如果这样写仍然报错,可以分别测试 embedding 表达式和向量距离表达式,缩小排查范围:
SET @value = EMBEDDING('ecs server', 'text-embedding-v4', 1024);
SELECT @value;
确认 vec 的类型和维度后,再单独执行包含 DISTANCE(vec, @value, 'COSINE') 的查询。
仍无法解决时
记录集群的完整内核版本,提供 SHOW CREATE TABLE r 的结果,并说明拆分测试时哪一步报错。现有信息还不足以判断问题来自版本、列定义还是运行环境,确认这些条件前不宜把某个原因当作定论。
参考:PolarDB for MySQL 的 EMBEDDING() 文档、PolarDB for MySQL 向量检索文档
备注:内容仅供参考。
