NEAREST BY yan tümcesi

Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL denetimi evet olarak işaretlendi Databricks Runtime 18 LTS ve üzeri

Note

Databricks Runtime 18, Databricks Runtime 18.0, 18.1 ve 18.2'den daha yenidir. Daha önce daha sonra numaralandırılmış sürüm olarak gönderilecek özellikler artık databricks Runtime 18'e tarihli güncelleştirmeler olarak gönderilir. Ayrıntılar için bkz. Birleşik sürüm notları hakkında.

JOIN Özel bir uzaklık veya benzerlik ifadesinde üst k derecelendirmesi ile genişletir. Sorgudaki (sol) table_reference her satır için, temelinde hedef (sağ) tablodan num_resultsen çok eşleşen ranking_expression satırları bulur ve bunları birleştirilmiş satırlar olarak döndürür.

ranking_expressionvector_cosine_similarity, vector_l2_distance, vector_inner_product veya çeşitli işlevleri birleştiren bileşik ifade gibi iki tablodan bir çift satır puanlayan herhangi bir sıralanabilir skaler ifade olabilir.

Syntax

{ INNER | LEFT [ OUTER ] } JOIN target_table_reference
  { APPROX | EXACT } NEAREST [ num_results ]
  BY { DISTANCE | SIMILARITY } ranking_expression

Parameters

  • target_table_reference

    Aranacak hedef tablo. Tablo, alt sorgu veya CTE olabilir.

  • { INNER | LEFT [ OUTER ] }

    Optional. Birleştirme türü. Varsayılan değer: INNER.

    • INNER eşleşen adayları olmayan sorgu satırlarını bırakır.
    • LEFT OUTER her sorgu satırını döndürür. Hedef tarafındaki sütunlar NULL , hiçbir aday olmadığında, örneğin hedef tablo boş olduğunda veya her aday olduğunda olur NULL. Sorgu satırı için daha az num_results aday varsa, yalnızca kullanılabilir adaylar döndürülür.

    Diğer birleştirme türleri (RIGHT, FULL, SEMI, ANTI, CROSS, NATURAL) yükseltir NEAREST_BY_JOIN.UNSUPPORTED_JOIN_TYPE.

  • { APPROX | EXACT }

    Sonuç kümesi sözleşmesini denetler.

    • EXACT altında ranking_expressiontam olarak ilk k satırları döndürür.
    • APPROX , tam derecelendirmeye yakın bir üst k kümesi döndürür. İyileştirici, her adayı değerlendirmek yerine daha hızlı, yaklaşık arama stratejileri kullanabilir.
  • EN YAKIN [ num_results ]

    İsteğe bağlı pozitif tamsayı değişmez değeri. Varsayılan değer 1’dır. aralığında [1, 100000]olmalıdır. Hedef tabloda değerinden num_resultsdaha az eşleşen satır varsa yalnızca kullanılabilir satırlar döndürülür.

    Aralığın dışındaki değerler değerini yükseltir NEAREST_BY_JOIN.NUM_RESULTS_OUT_OF_RANGE.

  • UZAKTAN | BENZERLİK

    öğesinin sıralamasını ranking_expressionayarlar.

    • DISTANCE satırları önce en küçük değere (en yakın = en düşük uzaklık) göre sıralar.
    • SIMILARITY satırları önce en büyük değere (en yakın = en yüksek benzerlik) göre sıralar.
  • ranking_expression

    Her iki tablodaki sütunlara da başvurabilen skaler ifade.

    Yaygın seçenekler şunlardır:

    Bu ifade, MAP gibi sıralamayı desteklemeyen bir veri türü döndürürse, Azure Databricks DATATYPE_MISMATCH oluşturur. INVALID_ORDERING_TYPE.

Notlar

Asimetri

NEAREST BY commutative değil. Sorgu tarafı sonucu sabitler. Her sorgu satırı en fazla num_results çıktı satırı oluşturur:

  • Tablodaki 100 satır ile tablodan usersproducts 1.000 satır birleştirildiğinde NEAREST 5birleştirme en fazla 500 satır döndürür.
  • Birleştirmenin iki tarafını ile productsbirleştirecek users şekilde değiştirirseniz, en fazla 5.000 satır döndürür.

İki tarafı değiştirmek farklı bir soru sorar, dolayısıyla sonuç için INNER JOINbile farklılık gösterir.

Yayın Akışı

NEAREST BY Veri Çerçeveleri veya Veri Kümeleri akışında desteklenmez. Akış kaynaklarına yönelik sorgular oluşturur NEAREST_BY_JOIN.STREAMING_NOT_SUPPORTED.

Girişleri ekleme

Vektör puanlama işlevleri kullanılırken, her iki vektör bağımsız değişkeni de aynı boyutsallığa sahip olmalıdır ARRAY<FLOAT> . Bkzvector_cosine_similarity. tür ve NULL işleme kuralları için işlev.

Dizi değerlerinden gömmeleri hesaplamak için, örneğin bir model system.ai.gte-large-enservisi olan ai_querysystem.ai kullanın.

Yaygın hata koşulları

Examples

Aşağıdaki örneklerde bu tablolar kullanılır. Eklemeler kısalık için 3 boyutlu vektörler olarak gösterilir; pratikte bunlar daha yüksek boyutludur ve ekleme modeli tarafından hesaplanır.

> 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