vector_search
関数
適用対象: Databricks SQL
重要
この機能はパブリック プレビュー段階にあります。
vector_search()
関数を使用すると、SQL を使用して Mosaic AI ベクトル検索インデックスでクエリを実行できます。
要件
- この関数は、従来の SQL ウェアハウスでは使用できません。
- 詳細については、「Databricks SQL の価格ページ」を参照してください。
- この機能は、モザイク AI ベクトル検索がサポートされているリージョンで使用できます。
構文
Databricks Runtime 15.3 以降では、query_text
または query_vector
を使用して、インデックス内で検索する対象を指定できます。
SELECT * FROM vector_search(
index,
{ query_text | query_vector },
[ num_results ]
)
Databricks Runtime 15.2 以下では、query
を使用して、インデックス内で検索する対象を指定できます。
SELECT * FROM vector_search(
index, query, num_results
)
引数
vector_search(index => indexName, query_text => queryText)
のように、すべての引数を名前で渡す必要があります。
index
:STRING
定数。呼び出し用の同じワークスペース内の既存のベクトル検索インデックスの完全修飾名。 定義者には、インデックスに対する “Select” の権限が必要です。- インデックス内で検索する式を指定するには、次のいずれかを使用します。
- Databricks Runtime 15.3 以降では、
query_text
を使用して、差分同期インデックスの埋め込みソース列で特定の文字列を検索します。 クエリは、インデックス内で検索する文字列のSTRING
式である必要があります。 - Databricks Runtime 15.3 以降では、
query_vector
を使用して、デルタ同期インデックスの埋め込みベクター列で特定のベクターを検索します。 この引数は、自己管理ベクトルを使用して差分同期インデックスを検索するために必要です。 クエリは、インデックス内で検索する埋め込みベクターのARRAY<FLOAT>
、ARRAY<DOUBLE>
、またはARRAY<DECIMAL(_, _)>
式である必要があります。 - Databricks Runtime 15.2 以下では、
query
を使用して、インデックス内で検索する文字列を指定します。
- Databricks Runtime 15.3 以降では、
num_results
(オプション): 整数定数、返すレコードの最大数。 既定値は 10 です。
返品
インデックスから一致する上位のレコードのテーブル。 インデックスのすべての列が含まれます。
例
次のセクションでは、さまざまなインデックス検索に対する SQL クエリの例を示します。
ソース列を埋め込むインデックスに対するテキスト クエリ
製品 SKU のインデックスを検索して、類似する製品を名前で検索します。 次の例では、Databricks Runtime 15.3 以降でのみサポートされている query_text
を使用しています。 Databricks Runtime 15.2 以下では、query_text
の代わりに query
を使用します。
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
ID | 製品名 |
---|---|
10 | iPhone |
20 | iPhone SE |
次の例では、LATERAL サブクエリを使用して複数の用語を同時に検索します。
SELECT
query_txt,
query_id,
search.*
FROM
query_table,
LATERAL(
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => query_txt, num_results => 2)
) as search
query_txt |
query_id | search.id | search.product_name |
---|---|---|---|
iphone | 1 | 10 | iPhone 10 |
iphone | 1 | 20 | iPhone SE |
pixel 8 | 2 | 30 | Pixel 8 |
pixel 8 | 2 | 40 | Pixel 8a |
ソース列を埋め込むインデックスに対するテキスト クエリ
事前に計算された埋め込みを使用して画像のインデックスを検索し、埋め込みによって同様の画像を見つけます。 次の例では、Databricks Runtime 15.3 以降でのみサポートされている query_vector
を使用しています。 Databricks Runtime 15.2 以下では、query_vector
の代わりに query
を使用します。
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => ARRAY(0.45, -0.35, 0.78, 0.22), num_results => 3)
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => ARRAY(0.45F, -0.35F, 0.78F, 0.22F), num_results => 3)
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => ARRAY(0.45D, -0.35D, 0.78D, 0.22D), num_results => 3)
id | image_name | image_embedding |
---|---|---|
28 | horse.jpg | [0.46, -0.34, 0.77, 0.21] |
27 | donkey.jpg | [0.44, -0.36, 0.79, 0.23] |
5 | elk.jpg | [0.23, -0.44, 0.77, 0.80] |
次の例では、LATERAL サブクエリを使用して複数の用語を同時に検索します。
SELECT
query_embedding,
search.*
FROM
query_table,
LATERAL(
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => image_embedding, num_results => 1)
) as search
クエリ埋め込み | search.id | 画像名を検索 | 検索画像埋め込み |
---|---|---|---|
[0.45, -0.35, 0.78, 0.22] | 27 | donkey.jpg | [0.46, -0.34, 0.77, 0.21] |
[0.14, 0.29, 0.30, -0.90] | 3 | landscape.jpg | [0.15, 0.30, 0.31, -0.91] |
[0.23, -0.44, 0.77, 0.80] | 10 | golden_gate_bridge.jpg | [0.28, -0.40, 0.23, 0.81] |
[0.88, 0.88, 0.88, 0.88] | 44 | blank.jpg | [0.88, 0.88, 0.88, 0.88] |
制限事項
プレビュー期間中は、次の制限事項が適用されます:
DIRECT_ACCESS
インデックスの種類に対するクエリはサポートされていません。- 入力パラメーター
filters_json
またはcolumns
はサポートされていません。 num_results
は 100 より大きいベクトル検索はサポートされていません。- ソース テーブルに対する READ アクセス権を持たないユーザーは、
vector_search()
を使用できません。 - ハイブリッド キーワード類似性検索は、
vector_search()
を使用してサポートされていません。 vector_search
は、Foundation Model API のプロビジョニングされたスループットを使用してエンドポイントにサービスを提供するモデルでは使用できません。