Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:
Databricks Runtime 18 LTS и выше
Note
Databricks Runtime 18 является более новым, чем Databricks Runtime 18.0, 18.1 и 18.2. Функции, которые ранее были отправлены в качестве более поздней нумеровой версии, теперь отправляются как устаревшие обновления в Databricks Runtime 18. Дополнительные сведения см. в разделе "Сведения об унифицированных заметках о выпуске".
JOIN Расширяет рейтинг топ-k на пользовательском расстоянии или выражении сходства. Для каждой строки в запросе (слева) table_reference он находит до верхней совпадающей num_results строки из целевой (правой) таблицы на ranking_expressionоснове, возвращая их как объединенные строки.
ranking_expression может быть любым упорядоченным скалярным выражением, которое оценивает пару строк из двух таблиц, например vector_cosine_similarity, vector_l2_distance, vector_inner_product или составное выражение, объединяющее несколько функций.
Syntax
{ INNER | LEFT [ OUTER ] } JOIN target_table_reference
{ APPROX | EXACT } NEAREST [ num_results ]
BY { DISTANCE | SIMILARITY } ranking_expression
Parameters
-
Целевая таблица для поиска. Может быть таблицей, вложенным запросом или CTE.
{ INNER | LEFT [ OUTER ] }Optional. Тип соединения. Значение по умолчанию —
INNER.-
INNERудаляет строки запроса, у которых нет подходящих кандидатов. -
LEFT OUTERвозвращает каждую строку запроса. Целевые столбцы не существуютNULL, например, если целевая таблица пуста или каждый кандидатNULL. Если для строки запроса существует меньшеnum_resultsкандидатов, возвращаются только доступные кандидаты.
Другие типы соединений (
RIGHT, ,FULLSEMIANTI,CROSS, )NATURALвызываютNEAREST_BY_JOIN.UNSUPPORTED_JOIN_TYPE.-
{ APPROX | EXACT }Управляет контрактом результирующих наборов.
-
EXACTвозвращает точные строки top-k в разделеranking_expression. -
APPROXвозвращает набор top-k, который приблизит точный рейтинг. Оптимизатор может использовать более быстрые, приблизительные стратегии поиска вместо оценки каждого кандидата.
-
БЛИЖАЙШЕЕ [ num_results ]
Необязательный положительный целый литерал. По умолчанию —
1. Должен находиться в диапазоне[1, 100000]. Если целевая таблица имеет меньше совпадающих строк, чемnum_results, возвращаются только доступные строки.Значения за пределами диапазона вызываются
NEAREST_BY_JOIN.NUM_RESULTS_OUT_OF_RANGE.ПО РАССТОЯНИЮ | СХОДСТВО
Задает порядок
ranking_expression.-
DISTANCEранжирует строки по наименьшему значению в первую очередь (ближайшее = наименьшее расстояние). -
SIMILARITYранжирует строки по наибольшему значению в первую очередь (ближайшее = наибольшее сходство).
-
ranking_expression
Скалярное выражение, которое может ссылаться на столбцы из обеих таблиц.
Распространенные варианты:
- функции сходства, такие как vector_cosine_similarity и vector_inner_product,
- функции расстояния, такие как vector_l2_distance,
- числовые расстояния, такие как манхэттенское расстояние:
vector_norm(zip_with(a.col, b.col, (x, y) -> x - y), 1.0f)
Если это выражение возвращает тип данных, который не поддерживает упорядочивание, например
MAP, Azure Databricks вызывает DATATYPE_MISMATCH. INVALID_ORDERING_TYPE.
Примечания.
Асимметрия
NEAREST BY не является коммутативным. Сторона запроса привязает результат. Каждая строка запроса создает до num_results выходных строк:
- Если 100 строк из соединения таблицы с 1000 строками из таблицы
usersproducts,NEAREST 5соединение возвращает до 500 строк. - При переключении двух сторон соединения на присоединение
productsusersк нему возвращается до 5000 строк.
Переключение двух сторон задает другой вопрос, поэтому результат отличается даже для INNER JOIN.
Стриминг
NEAREST BY не поддерживается в потоковых кадрах данных или наборах данных. Запросы к источникам потоковой передачи вызываются NEAREST_BY_JOIN.STREAMING_NOT_SUPPORTED.
Внедрение входных данных
При использовании функций оценки векторов оба вектора должны иметь ARRAY<FLOAT> одинаковую размерность. См. vector_cosine_similarity функцию для правил типа и NULL обработки.
Чтобы вычислить внедрение из строковых значений, используйте ai_query с моделью внедрения, размещенной в Databricks, например databricks-gte-large-en.
Распространенные условия ошибки
- DATATYPE_MISMATCH. INVALID_ORDERING_TYPE
NEAREST_BY_JOIN.NUM_RESULTS_OUT_OF_RANGENEAREST_BY_JOIN.STREAMING_NOT_SUPPORTEDNEAREST_BY_JOIN.UNSUPPORTED_JOIN_TYPE
Примеры
В следующих примерах используются эти таблицы. Векторы внедрения отображаются как трехмерные векторы для краткости; на практике они являются более высокими размерными и вычисляются моделью внедрения.
> 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