Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
Databricks Runtime 18.3 ke atas
Memperluas dengan peringkat k atas pada jarak kustom atau ekspresi kesamaan JOIN . Untuk setiap baris dalam kueri (kiri) table_reference, baris tersebut menemukan baris yang cocok hingga atas num_results dari tabel target (kanan) berdasarkan ranking_expression, mengembalikannya sebagai baris yang digabungkan.
ranking_expression bisa berupa ekspresi skalar yang dapat diurutkan yang menilai sepasang baris dari dua tabel — misalnya vector_cosine_similarity, vector_l2_distance, vector_inner_product, atau ekspresi komposit yang menggabungkan beberapa fungsi.
Syntax
{ INNER | LEFT [ OUTER ] } JOIN target_table_reference
{ APPROX | EXACT } NEAREST [ num_results ]
BY { DISTANCE | SIMILARITY } ranking_expression
Parameters
-
Tabel target untuk dicari. Bisa berupa tabel, subkueri, atau CTE.
{ INNER | LEFT [ OUTER ] }Optional. Jenis gabungan. Defaultnya adalah
INNER.-
INNERmenghilangkan baris kueri yang tidak memiliki kandidat yang cocok. -
LEFT OUTERmengembalikan setiap baris kueri. Kolom sisi target adalahNULLketika tidak ada kandidat — misalnya, ketika tabel target kosong atau setiap kandidat adalahNULL. Jika kurang darinum_resultskandidat yang ada untuk baris kueri, hanya kandidat yang tersedia yang dikembalikan.
Jenis gabungan lainnya (
RIGHT, ,SEMIFULL,ANTI,CROSS,NATURAL) naikkanNEAREST_BY_JOIN.UNSUPPORTED_JOIN_TYPE.-
{ APPROX | EXACT }Mengontrol kontrak tataan hasil.
-
EXACTmengembalikan baris top-k yang tepat di bawahranking_expression. -
APPROXmengembalikan set top-k yang mempertaruhkan peringkat yang tepat. Pengoptimal dapat menggunakan strategi pencarian yang lebih cepat, bukan mengevaluasi setiap kandidat.
-
TERDEKAT [ num_results ]
Bilangan bulat positif opsional literal. Secara default menjadi
1. Harus dalam rentang[1, 100000]. Jika tabel target memiliki lebih sedikit baris yang cocok daripadanum_results, hanya baris yang tersedia yang dikembalikan.Nilai di luar rentang naikkan
NEAREST_BY_JOIN.NUM_RESULTS_OUT_OF_RANGE.BERDASARKAN JARAK | KESAMAAN
Mengatur urutan
ranking_expression.-
DISTANCEmemberi peringkat baris menurut nilai terkecil terlebih dahulu (terdekat = jarak terendah). -
SIMILARITYperingkat baris berdasarkan nilai terbesar terlebih dahulu (terdekat = kesamaan tertinggi).
-
ranking_expression
Ekspresi skalar yang dapat mereferensikan kolom dari kedua tabel.
Pilihan umumnya adalah:
- fungsi kesamaan seperti vector_cosine_similarity dan vector_inner_product,
- fungsi jarak seperti vector_l2_distance,
- jarak numerik seperti jarak Manhattan:
vector_norm(zip_with(a.col, b.col, (x, y) -> x - y), 1.0f).
Jika ekspresi ini mengembalikan tipe data yang tidak mendukung pengurutan, seperti
MAP, Azure Databricks menaikkan DATATYPE_MISMATCH. INVALID_ORDERING_TYPE.
Notes
Asimetri
NEAREST BY tidak komuttif. Sisi kueri menjangkar hasil — setiap baris kueri menghasilkan hingga num_results baris output:
- Saat 100 baris dari gabungan tabel
usersdengan 1.000 baris dari tabelproductsdenganNEAREST 5, gabungan mengembalikan hingga 500 baris. - Jika Anda mengalihkan dua sisi gabungan untuk bergabung
productsdenganusers, itu mengembalikan hingga 5.000 baris.
Bertukar kedua belah pihak mengajukan pertanyaan yang berbeda, sehingga hasilnya berbeda bahkan untuk INNER JOIN.
Streaming
NEAREST BY tidak didukung pada streaming DataFrame atau Himpunan Data. Kueri terhadap sumber streaming menaikkan NEAREST_BY_JOIN.STREAMING_NOT_SUPPORTED.
Menyematkan input
Saat menggunakan fungsi penilaian vektor, kedua argumen vektor harus ARRAY<FLOAT> dengan dimensi yang sama. Lihat vector_cosine_similarity fungsi untuk jenis dan NULL aturan penanganan.
Untuk menghitung penyematan dari nilai string, gunakan ai_query dengan model penyematan yang dihosting Databricks seperti databricks-gte-large-en.
Kondisi kesalahan umum
- DATATYPE_MISMATCH. INVALID_ORDERING_TYPE
NEAREST_BY_JOIN.NUM_RESULTS_OUT_OF_RANGENEAREST_BY_JOIN.STREAMING_NOT_SUPPORTEDNEAREST_BY_JOIN.UNSUPPORTED_JOIN_TYPE
Examples
Contoh berikut menggunakan tabel ini. Penyematan ditampilkan sebagai vektor 3 dimensi untuk brevity; dalam praktiknya mereka berdimensi lebih tinggi dan dihitung oleh model penyematan.
> CREATE TEMP VIEW users(user_id, name, embedding) AS
VALUES
(1, 'Alice', ARRAY(1.0f, 0.0f, 0.0f)),
(2, 'Bob', ARRAY(0.0f, 1.0f, 0.0f)),
(3, 'Carol', ARRAY(0.0f, 0.0f, 0.0f));
> CREATE TEMP VIEW products(product_id, name, price, country, embedding) AS
VALUES
('P1', 'Trail running shoes', 120, 'EU', ARRAY(0.9f, 0.1f, 0.1f)),
('P2', 'Hiking boots', 180, 'EU', ARRAY(0.8f, 0.2f, 0.0f)),
('P3', 'Office shoes', 95, 'US', ARRAY(0.1f, 0.9f, 0.1f)),
('P4', 'Sandals', 45, 'US', ARRAY(0.0f, 0.8f, 0.2f)),
('P5', 'Running shoes', 110, 'EU', ARRAY(0.5f, 0.5f, 0.0f));
-- Ad-hoc vector search with an explicit query vector.
> SELECT t.product_id, t.name
FROM (SELECT ARRAY(1.0f, 0.0f, 0.0f) AS embedding) q
INNER JOIN products t
APPROX NEAREST 3 BY SIMILARITY vector_cosine_similarity(q.embedding, t.embedding);
product_id name
---------- -------------------
P1 Trail running shoes
P2 Hiking boots
P5 Running shoes
-- Batch recommendations: for every user, return the 2 nearest products.
> SELECT q.user_id, q.name, t.product_id, t.name AS product
FROM users q
INNER JOIN products t
APPROX NEAREST 2 BY SIMILARITY vector_cosine_similarity(q.embedding, t.embedding);
user_id name product_id product
------- ----- ---------- -------------------
1 Alice P1 Trail running shoes
1 Alice P2 Hiking boots
2 Bob P3 Office shoes
2 Bob P4 Sandals
-- Pre-filter the target table via a subquery (EU products only).
> SELECT q.user_id, q.name, t.product_id, t.name AS product, t.price
FROM users q
INNER JOIN (SELECT * FROM products WHERE country = 'EU') AS t
APPROX NEAREST 2 BY SIMILARITY vector_cosine_similarity(q.embedding, t.embedding);
user_id name product_id product price
------- ----- ---------- ------------------- -----
1 Alice P1 Trail running shoes 120
1 Alice P2 Hiking boots 180
2 Bob P5 Running shoes 110
2 Bob P2 Hiking boots 180
-- LEFT OUTER returns every query row. Carol's embedding has zero magnitude,
-- so vector_cosine_similarity returns NULL for all comparisons and her row
-- is preserved with NULL target columns.
> SELECT q.user_id, q.name, t.product_id, t.name AS product
FROM users q
LEFT OUTER JOIN products t
APPROX NEAREST 2 BY SIMILARITY vector_cosine_similarity(q.embedding, t.embedding);
user_id name product_id product
------- ----- ---------- -------------------
1 Alice P1 Trail running shoes
1 Alice P2 Hiking boots
2 Bob P3 Office shoes
2 Bob P4 Sandals
3 Carol NULL NULL
-- EXACT returns the exact top-k under the ranking expression.
> SELECT t.product_id, t.name
FROM (SELECT ARRAY(1.0f, 0.0f, 0.0f) AS embedding) q
INNER JOIN products t
EXACT NEAREST 3 BY DISTANCE vector_l2_distance(q.embedding, t.embedding);
product_id name
---------- -------------------
P1 Trail running shoes
P2 Hiking boots
P5 Running shoes
Artikel terkait
- referensi tabel
- JOIN
-
SELECT(pilihan lanjutan) -
vector_cosine_similarityfungsi -
vector_l2_distancefungsi -
vector_inner_productfungsi -
vector_searchfungsi