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 距离(欧几里得距离):
两个向量的维度必须相同,否则会返回错误。
示例:
[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)
使用以下公式计算两个向量之间的 余弦距离:
两个向量的维度必须相同,否则会返回错误。
示例:
[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)
通过使用两个向量的内积的负值计算距离,公式如下:
两个向量的维度必须相同,否则会返回错误。
示例:
[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 距离(曼哈顿距离):
两个向量的维度必须相同,否则会返回错误。
示例:
[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 范数(欧几里得范数):
示例:
[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。