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;

後續步驟