Cloud SQL 函数

本页介绍 Cloud SQL 函数。

矢量转换函数

下表列出了可用于在 SELECT 语句中操控矢量信息的函数。

功能 说明
vector_to_string 输入:VECTOR

输出:STRING

将参数转换为人类可读的矢量格式的字符串。

输入:一个类型为 VECTOR 的参数

输出:字符串

语法:

vector_to_string(some_embedding)

string_to_vector 输入:STRING

输出:VECTOR

将字符串转换为人类可读的矢量格式。这样,您就可以写入要在矢量中表示的值。

输入:字符串

语法:

string_to_vector('some_embedding')

输出:一个矢量类型的值。

搜索函数

本部分介绍了 Cloud SQL 搜索函数。

KNN 函数

下表列出了可用于计算 KNN 向量距离的函数。

功能 数据类型 说明
vector_distance 输入:VECTOR

输出:REAL

计算两个 VECTOR 之间的矢量距离。两个 VECTOR 必须具有相同的尺寸。

输入:必需。接受两个矢量值,第三个可选字符串参数表示距离测量方法。默认值为“l2_squared_distance”。其他选项包括 `cosine_distance` 和 `dot_product`。

输出:两个向量之间的距离。

例如:

SELECT vector_distance(string_to_vector('[1,-2,3]'), string_to_vector('[1,2,3]'), 'Distance_Measure=dot_product');

cosine_distance 输入:VECTOR

输出:REAL

用于计算两个向量之间的余弦角度的算法。值越小,表示向量之间的相似度越高。

输入:接受两个矢量值。这些可以是列名称或常量。

输出:两个向量之间的余弦距离。

例如:

SELECT cosine_distance(string_to_vector('[1,2,3]'), string_to_vector('[1,1,1]'));

SELECT id FROM t1 ORDER BY cosine_distance(string_to_vector('[1,2,3]'), embedding_column_name) LIMIT 10;

dot_product 输入:VECTOR

输出:REAL

用于在两个输入矢量之间执行点积运算的算法,以计算和输出单个标量值。

输入:接受两个矢量值。这些可以是列名称或常量。

输出:两个矢量的点积。

例如:

SELECT dot_product(string_to_vector('[1,2,3]'), string_to_vector('[1,1,1]'));

SELECT id FROM t1 ORDER BY dot_product(string_to_vector('[1,2,3]'), embbeding_column_name) LIMIT 10;

l2_squared_distance 输入:VECTOR

输出:REAL

一种算法,用于将两个输入矢量在每个维度上的距离平方相加,以衡量它们之间的欧几里得距离。

输入:接受两个矢量值。这些可以是列名称或常量。

输出:两个向量之间的 L2 平方距离。

例如:

SELECT l2_squared_distance(string_to_vector('[1,2,3]'), string_to_vector('[1,1,1]'));

SELECT id FROM t1 ORDER BY l2_squared_distance(string_to_vector('[1,2,3]'), embbeding_column_name) LIMIT 10;

ANN 函数

下表列出了可用于计算矢量距离的函数。

函数 数据类型 说明
approx_distance 输入:VECTOR

输出:REAL

使用所选算法查找满足距离衡量标准的前 K 个最接近的行。此函数用于查询向量列与常量值之间的近似最近邻。两个嵌入列的 VECTOR 类型和常量 VECTOR 必须具有相同的维度。在某些情况下,此函数会回退到 KNN(精确搜索)搜索,而不是 ANN 搜索。您必须在使用此函数的查询中添加限制。

语法

approx_distance(embedding_name,
query_vector,
'distance_measure=algorithm_name
[, num_leaves_to_search=value]'

输入

  1. embedding_name:基表中的向量嵌入列名称。
  2. query_vector:类型为 `VECTOR` 的常量,可以是(但不必是)string_to_vector 的输出。
  3. 以英文逗号分隔的搜索字符串选项包括:
    • distance_measure:必填。使用算法衡量向量之间的距离。它使用以下字符串字面量:
      • L2_SQUARED
      • COSINE
      • DOT_PRODUCT

      例如:distance_measure=cosine

    • num_leaves_to_search:可选。指定要为 ANN 向量相似度搜索探测的叶子数量。如果您未指定叶子数量,Cloud SQL for MySQL 会为 num_leaves_to_search 选择一个计算值,该值可以在 information_schema.innodb_vector_indexes 中查看。计算得出的数量通常是一个不错的起点,可提供良好的搜索质量和效果。建议您根据工作负载以及性能或质量权衡来调整 num_leaves_to_search

    例如:

    'distance_measure=dot_product,
    num_leaves_to_search=100'

    必需的 LIMIT 值:指定的限制用于确定要返回的邻居数量(也称为前 K 个邻居)。

    输出:基表中前 K 个最接近行的大致距离。

    此函数只能在 ORDER BYSELECT 列表中使用。

    例如:

    SELECT id, approx_distance(embedding_column_name
    string_to_vector('[1,1,1]'),
    'distance_measure=cosine') dist from t1
    ORDER BY dist LIMIT 10;

    SELECT id
    FROM t1
    ORDER BY
    approx_distance(
    embedding_column_name
    string_to_vector('[1,1,1]'),
    'distance_measure=dot_product,num_leaves_to_search=100) LIMIT 4;

后续步骤