適用対象:
Databricks SQL
重要
この機能はパブリック プレビュー段階にあります。
vector_search() 関数を使用すると、SQL を使用して Mosaic AI ベクトル検索インデックスのクエリを実行できます。
要件
- この関数は、従来の SQL ウェアハウスでは使用できません。
- 詳細については、Databricks SQL の価格のページを参照してください。
- この機能は、Mosaic 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(省略可能): 整数定数。返すレコードの最大数。 既定値は 1.0 です。 -
query_type(省略可能): ベクター検索インデックスに対して実行する検索の種類。 明示的に指定されていない場合は、既定でANNされます。-
query_typeがANNされている場合は、近似近隣検索または類似検索を実行するために、query_textまたはquery_vectorを指定する必要があります。 -
query_typeがHYBRID場合は、query_textを指定する必要があります。 ハイブリッド検索には、query_textとquery_vectorの両方を指定できます。 このインスタンスのハイブリッド検索とは、キーワード検索でリテラル テキストをターゲットとして使用する類似性検索とキーワード検索の組み合わせを意味します。
-
次の表は、埋め込みモデルを持 つ 差分同期インデックスがある場合に使用できる引数をまとめたものです。
query_type |
query_text |
query_vector |
Description |
|---|---|---|---|
| ANN (近似最近隣または類似性検索とも呼ばれます) | ✓ |
|
|
| ANN (近似最近隣または類似性検索とも呼ばれます) | ✓ | 類似性検索には query_vector を使用します。 |
|
| ハイブリッド | ✓ |
|
|
| ハイブリッド | ✓ | ✓ | キーワード検索には query_text を使用し、類似性検索には query_vector を使用します。 |
次の表では、埋め込みモデル のない 差分同期インデックスがある場合に使用できるさまざまなシナリオと引数について説明します。
query_type |
query_text |
query_vector |
Description |
|---|---|---|---|
ANN (近似最近隣または類似性検索とも呼ばれます) |
✓ | 類似性検索にはquery_vector を使用します。 類似性検索では、検索ターゲットとして埋め込みベクターが必要です。 このシナリオでは埋め込みモデルを使用して埋め込みベクトルを計算できないため、埋め込みベクターを指定する必要があります。 |
|
| ハイブリッド | ✓ | ✓ | テキストとベクターの特定の文字列をハイブリッド検索するには、 query_text と query_vectorの両方を指定します。 |
戻り値
インデックスの上位の一致するレコードをまとめたテーブル。 インデックスのすべての列が含まれます。
例
次のセクションでは、さまざまなインデックス検索に対する SQL クエリの例を示します。
ハイブリッド検索クエリ
次のハイブリッド検索の例では、次の検索の種類を組み合わせて、ベクター検索インデックスのテキストまたはメタデータで指定された用語を検索します。
- ベクトル類似性検索:
Wi-Fi issuesの同様のセマンティック意味を検索します。 - キーワード検索: キーワード インデックスの
Wi-Fi issues LMP-9R2を検索します。
SELECT * FROM vector_search(
index => 'main.support_docs.index',
query_text => 'Wi-Fi issues LMP-9R2',
query_type => 'HYBRID',
num_results => 3)
| doc_id | title | product_code |
|---|---|---|
| 1403 | Wi-Fi トラブルシューティング ガイド — LMP-9R2 | LMP-9R2 |
| 1332 | LMP-9R2 デバイスの接続に関する既知の問題 | LMP-9R2 |
| 1271 | 一般的な Wi-Fi トラブルシューティング ガイド | LMP-8R2 |
次のハイブリッド検索の例では、用語query_textのquery_vectorとWi-Fi issues LMP-9R2の両方を指定します。 この例では、キーワード検索は会社固有の用語 (この場合は "LMP-9R2" など) でパフォーマンスが向上しますが、一般的にパブリック データセットでトレーニングされるベクター検索では、"LMP-9R2" のような用語は認識されません。
SELECT * FROM vector_search(
index => 'main.support_docs.index',
query_text => 'Wi-Fi issues LMP-9R2',
query_vector => array( 0.0213, 0.1045, 0.0871, 0.0562, 0.1459, ... 0.0131),-- a self computed embedding of the `query_text` param
query_type => 'HYBRID',
num_results => 3 )
| doc_id | title | product_code |
|---|---|---|
| 1403 | Wi-Fi トラブルシューティング ガイド — LMP-9R2 | LMP-9R2 |
| 1332 | LMP-9R2 デバイスの接続に関する既知の問題 | LMP-9R2 |
| 1271 | 一般的な Wi-Fi トラブルシューティング ガイド | LMP-8R2 |
ソース列を埋め込むインデックスに対するテキスト クエリ
製品 SKU のインデックスを検索して、類似する製品を名前で検索します。 次の例では、Databricks Runtime 15.3 以降でのみサポートされている query_text を使用しています。 Databricks Runtime 15.2 以下では、queryの代わりに query_text を使用します。
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 |
| ピクセル 8 | 2 | 30 | ピクセル 8 |
| ピクセル 8 | 2 | 40 | ピクセル 8a |
ソース列を埋め込むインデックスに対するテキスト クエリ
事前に計算された埋め込みを使用して画像のインデックスを検索し、埋め込みによって同様の画像を見つけます。 次の例では、Databricks Runtime 15.3 以降でのみサポートされている query_vector を使用しています。 Databricks Runtime 15.2 以下では、queryの代わりに query_vector を使用します。
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 | 画像埋め込み |
|---|---|---|
| 28 | horse.jpg | [0.46, -0.34, 0.77, 0.21] |
| 二十七 | 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] | 二十七 | 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はサポートされていません。 - 100 より大きい
num_resultsを使用したベクトル検索はサポートされていません。 -
vector_searchは、Foundation Model API のプロビジョニングされたスループットを使用するモデルサービングエンドポイントでは使用できません。