📣

TiDB Cloud Serverless 现已更名为
Starter
!此页面由 AI 自动翻译,英文原文请见
此处。

Vector Functions and Operators

本文档列出了可用于 Vector 数据类型的函数和操作符。

Vector 函数

以下函数专为 Vector 数据类型 设计。

Vector 距离函数:

函数名描述
VEC_L2_DISTANCE计算两个向量之间的 L2 距离(欧几里得距离)
VEC_COSINE_DISTANCE计算两个向量之间的余弦距离
VEC_NEGATIVE_INNER_PRODUCT计算两个向量的内积的负值
VEC_L1_DISTANCE计算两个向量之间的 L1 距离(曼哈顿距离)

其他向量函数:

函数名描述
VEC_DIMS返回向量的维度
VEC_L2_NORM计算向量的 L2 范数(欧几里得范数)
VEC_FROM_TEXT将字符串转换为向量
VEC_AS_TEXT将向量转换为字符串

扩展的内置函数和操作符

以下内置函数和操作符已扩展支持对 Vector 数据类型 的操作。

算术操作符:

名称描述
+向量元素逐个相加操作符
-向量元素逐个相减操作符

关于向量算术的详细工作原理,请参见 Vector Data Type | Arithmetic

聚合(GROUP BY)函数:

名称描述
COUNT()返回满足条件的行数
COUNT(DISTINCT)返回不同值的个数
MAX()返回最大值
MIN()返回最小值

比较函数和操作符:

名称描述
BETWEEN ... AND ...检查值是否在某个范围内
COALESCE()返回第一个非 NULL 的参数
=等于操作符
<=>空安全相等操作符
>大于操作符
>=大于或等于操作符
GREATEST()返回最大参数
IN()检查值是否在某个集合内
IS NULL测试值是否为 NULL
ISNULL()测试参数是否为 NULL
LEAST()返回最小参数
<小于操作符
<=小于或等于操作符
NOT BETWEEN ... AND ...检查值是否不在某个范围内
!=, <>不等于操作符
NOT IN()检查值是否不在某个集合内

关于向量比较的详细信息,请参见 Vector Data Type | Comparison

流程控制函数:

名称描述
CASE条件表达式
IF()条件判断(if/else)
IFNULL()空值判断(null if/else)
NULLIF()如果 expr1 = expr2 则返回 NULL

类型转换函数:

名称描述
CAST()将值转换为字符串或向量
CONVERT()将值转换为字符串

关于如何使用 CAST() 的详细信息,请参见 Vector Data Type | Cast

完整参考

VEC_L2_DISTANCE

VEC_L2_DISTANCE(vector1, vector2)

使用以下公式计算两个向量之间的 L2 距离(欧几里得距离):

DISTANCE(p,q)=i=1n(piqi)2DISTANCE(p,q)=\sqrt {\sum \limits _{i=1}^{n}{(p_{i}-q_{i})^{2}}}

两个向量的维度必须相同,否则会返回错误。

示例:

[tidb]> SELECT VEC_L2_DISTANCE('[0,3]', '[4,0]'); +-----------------------------------+ | VEC_L2_DISTANCE('[0,3]', '[4,0]') | +-----------------------------------+ | 5 | +-----------------------------------+

VEC_COSINE_DISTANCE

VEC_COSINE_DISTANCE(vector1, vector2)

使用以下公式计算两个向量之间的 余弦距离

DISTANCE(p,q)=1.0i=1npiqii=1npi2i=1nqi2DISTANCE(p,q)=1.0 - {\frac {\sum \limits _{i=1}^{n}{p_{i}q_{i}}}{{\sqrt {\sum \limits _{i=1}^{n}{p_{i}^{2}}}}\cdot {\sqrt {\sum \limits _{i=1}^{n}{q_{i}^{2}}}}}}

两个向量的维度必须相同,否则会返回错误。

示例:

[tidb]> SELECT VEC_COSINE_DISTANCE('[1, 1]', '[-1, -1]'); +-------------------------------------------+ | VEC_COSINE_DISTANCE('[1, 1]', '[-1, -1]') | +-------------------------------------------+ | 2 | +-------------------------------------------+

VEC_NEGATIVE_INNER_PRODUCT

VEC_NEGATIVE_INNER_PRODUCT(vector1, vector2)

通过使用两个向量的内积的负值计算距离,公式如下:

DISTANCE(p,q)=INNER_PROD(p,q)=i=1npiqiDISTANCE(p,q)=- INNER\_PROD(p,q)=-\sum \limits _{i=1}^{n}{p_{i}q_{i}}

两个向量的维度必须相同,否则会返回错误。

示例:

[tidb]> SELECT VEC_NEGATIVE_INNER_PRODUCT('[1,2]', '[3,4]'); +----------------------------------------------+ | VEC_NEGATIVE_INNER_PRODUCT('[1,2]', '[3,4]') | +----------------------------------------------+ | -11 | +----------------------------------------------+

VEC_L1_DISTANCE

VEC_L1_DISTANCE(vector1, vector2)

使用以下公式计算两个向量之间的 L1 距离(曼哈顿距离):

DISTANCE(p,q)=i=1npiqiDISTANCE(p,q)=\sum \limits _{i=1}^{n}{|p_{i}-q_{i}|}

两个向量的维度必须相同,否则会返回错误。

示例:

[tidb]> SELECT VEC_L1_DISTANCE('[0,0]', '[3,4]'); +-----------------------------------+ | VEC_L1_DISTANCE('[0,0]', '[3,4]') | +-----------------------------------+ | 7 | +-----------------------------------+

VEC_DIMS

VEC_DIMS(vector)

返回向量的维度。

示例:

[tidb]> SELECT VEC_DIMS('[1,2,3]'); +---------------------+ | VEC_DIMS('[1,2,3]') | +---------------------+ | 3 | +---------------------+ [tidb]> SELECT VEC_DIMS('[]'); +----------------+ | VEC_DIMS('[]') | +----------------+ | 0 | +----------------+

VEC_L2_NORM

VEC_L2_NORM(vector)

使用以下公式计算向量的 L2 范数(欧几里得范数):

NORM(p)=i=1npi2NORM(p)=\sqrt {\sum \limits _{i=1}^{n}{p_{i}^{2}}}

示例:

[tidb]> SELECT VEC_L2_NORM('[3,4]'); +----------------------+ | VEC_L2_NORM('[3,4]') | +----------------------+ | 5 | +----------------------+

VEC_FROM_TEXT

VEC_FROM_TEXT(string)

将字符串转换为向量。

示例:

[tidb]> SELECT VEC_FROM_TEXT('[1,2]') + VEC_FROM_TEXT('[3,4]'); +-------------------------------------------------+ | VEC_FROM_TEXT('[1,2]') + VEC_FROM_TEXT('[3,4]') | +-------------------------------------------------+ | [4,6] | +-------------------------------------------------+

VEC_AS_TEXT

VEC_AS_TEXT(vector)

将向量转换为字符串。

示例:

[tidb]> SELECT VEC_AS_TEXT('[1.000, 2.5]'); +-------------------------------+ | VEC_AS_TEXT('[1.000, 2.5]') | +-------------------------------+ | [1,2.5] | +-------------------------------+

MySQL 兼容性

向量函数以及对向量数据类型的扩展内置函数和操作符仅在 TiDB 中支持,不支持 MySQL。

另请参见

文档内容是否有帮助?