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 向量相似度搜尋要探測的葉子數量。如果您未指定層級數量,CloudSQL 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;

後續步驟