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

選択したアルゴリズムを使用して、距離の測定値を満たす Top-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 値: 指定された上限は、返される近傍の数(Top-K とも呼ばれます)として使用されます。

    出力: ベーステーブルの Top-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;

次のステップ