Cloud SQL 関数

このページでは、Cloud SQL 関数について説明します。

ベクトル変換関数

次の表に、SELECT ステートメントでベクトル情報を操作するために使用できる関数を示します。

ファンクション 説明
vector_to_string 入力: VECTOR

出力: STRING

引数を、人が読めるベクトル形式の文字列に変換します。

入力: VECTOR 型の引数 1 つ

出力: 文字列

構文:

vector_to_string(some_embedding)

string_to_vector 入力: STRING

出力: VECTOR

文字列を、人が読めるベクター形式に変換します。これにより、ベクトルで表す値を記述できます。

入力: 文字列

構文:

string_to_vector('some_embedding')

出力: ベクトル型の値 1 つ。

検索関数

このセクションでは、Cloud SQL 検索関数について説明します。

KNN 関数

次の表に、KNN ベクトル距離の計算に使用できる関数を示します。

ファンクション データの種類 説明
vector_distance 入力: VECTOR

出力: REAL

2 つの VECTOR 間のベクトル距離を計算します。2 つの VECTOR は同じディメンションにする必要があります。

入力: 必須。2 つのベクトル値を取ります。3 番目の文字列引数(省略可)は距離の測定単位を示します。デフォルトは「l2_squared_distance」です。他のオプションには、cosine_distance と dot_product があります。

出力: 2 つのベクトル間の距離。

次に例を示します。

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

cosine_distance 入力: VECTOR

出力: REAL

2 つのベクトル間の角度のコサインを計算するアルゴリズム。値が小さいほど、ベクトル間の類似度が高くなります。

入力: 2 つのベクトル値を受け取ります。これらは列名または定数にできます。

出力: 2 つのベクトル間のコサイン距離。

次に例を示します。

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

2 つの入力ベクトルの間のドット積演算を実行して、単一のスカラー値を計算して出力するアルゴリズム。

入力: 2 つのベクトル値を受け取ります。これらは列名または定数にできます。

出力: 2 つのベクトルの内積。

次に例を示します。

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

2 つの入力ベクトル間の各ディメンションの距離の二乗を加算して、それらの間のユークリッド距離を測定するアルゴリズム。

入力: 2 つのベクトル値を受け取ります。これらは列名または定数にできます。

出力: 2 つのベクトル間の 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 個の最も近い行を見つけます。この関数は、ベクトル列から定数値への近似最近傍をクエリします。2 つのエンベディング列の VECTOR 型と定数 VECTOR は同じディメンションである必要があります。この関数は、ANN 検索ではなく KNN(完全一致検索)検索にフォールバックする場合があります。この関数を使用するクエリには、上限を含める必要があります。

構文:

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

入力:

  1. embedding_name: ベーステーブルのベクトル エンベディング列名。
  2. query_vector: string_to_vector の出力(必須ではありません)にできる「VECTOR」型の定数。
  3. カンマ区切りの検索文字列のオプションは次のとおりです。
    • distance_measure: 必須。アルゴリズムを使用してベクトル間の距離を測定します。次の文字列リテラルが使用されます。
      • L2_SQUARED
      • COSINE
      • DOT_PRODUCT

      例: distance_measure=cosine

    • num_leaves_to_search: 省略可。ANN ベクトル類似性検索でプローブするリーフの数を指定します。リーフの数を指定しない場合、Cloud SQL for MySQL は、information_schema.innodb_vector_indexes で確認できる num_leaves_to_search の計算値を選択します。通常、計算された数値は、検索の品質とパフォーマンスに優れているため、出発点として適しています。ワークロードとパフォーマンスまたは品質のトレードオフに基づいて num_leaves_to_search をチューニングすることをおすすめします。

    次に例を示します。

    'distance_measure=dot_product,
    num_leaves_to_search=100'

    必須の LIMIT 値: 指定された上限は、返される近傍の数(上位 K とも呼ばれます)として使用されます。

    出力: ベーステーブルで最も近い上位 K 行の近似距離。

    この関数は、ORDER BY リストまたは SELECT リストでのみ使用できます。

    次に例を示します。

    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;

次のステップ