Kategorien:

Aggregatfunktionen (Similarity Estimation) , Syntax und Verwendung von Fensterfunktionen

APPROXIMATE_SIMILARITY

Gibt eine Schätzung der Ähnlichkeit (Jaccard-Index) von Eingaben basierend auf deren MinHash-Status zurück. Weitere Informationen zu MinHash-Status finden Sie unter Schätzung der Ähnlichkeit von zwei oder mehr Sets.

Aliasse:

APPROXIMATE_JACCARD_INDEX

Siehe auch:

MINHASH, MINHASH_COMBINE

Syntax

APPROXIMATE_SIMILARITY( [ DISTINCT ] <expr> [ , ... ] )

APPROXIMATE_SIMILARITY(*)

Argumente

expr

Die Ausdrücke sollten aus einem oder mehreren MinHash-Status bestehen, die bei Aufrufen der Funktion MINHASH zurückgegeben werden. Mit anderen Worten müssen die Ausdrücke MinHash-Statusinformationen sein und nicht die Spalte oder der Ausdruck, für den Sie die ungefähre Ähnlichkeit wünschen. (Das Beispiel unten macht dies klarer.)

Weitere Informationen zu MinHash-Status finden Sie unter Schätzung der Ähnlichkeit von zwei oder mehr Sets.

Rückgabewerte

Eine Gleitkommazahl zwischen 0,0 und 1,0 (einschließlich), wobei 1,0 angibt, dass die Mengen identisch sind, und 0,0, dass die Mengen keine Überlappung aufweisen.

Nutzungshinweise

  • DISTINCT kann als Argument eingefügt werden, hat jedoch keine Auswirkungen.

  • Die eingegebenen MinHash-Status müssen MinHash-Arrays gleicher Länge haben.

  • Die Arraylänge der eingegebenen MinHash-Status ist ein Indikator für die Näherungsqualität.

    Je größer der Wert von k in der Funktion MINHASH, desto besser die Näherung. Dieser Wert hat jedoch einen linearen Einfluss auf die Berechnungszeit für das Schätzen der Ähnlichkeit.

Beispiele

USE SCHEMA snowflake_sample_data.tpch_sf1;

SELECT APPROXIMATE_SIMILARITY(mh) FROM
    (
      (SELECT MINHASH(100, C5) mh FROM orders WHERE c2 <= 50000)
         UNION
      (SELECT MINHASH(100, C5) mh FROM orders WHERE C2 > 50000)
    );

+----------------------------+
| APPROXIMATE_SIMILARITY(MH) |
|----------------------------|
|                       0.97 |
+----------------------------+

Here is a more extensive example, showing the three related functions MINHASH, MINHASH_COMBINE and APPROXIMATE_SIMILARITY. This example creates 3 tables (ta, tb, and tc), two of which (ta and tb) are similar, and two of which (ta and tc) are completely dissimilar.

Erstellen Sie Tabellen, und füllen Sie diese mit Werten:

CREATE TABLE ta (i INTEGER);
CREATE TABLE tb (i INTEGER);
CREATE TABLE tc (i INTEGER);

INSERT INTO ta (i) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
INSERT INTO tb (i) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (11);
INSERT INTO tc (i) VALUES (-1), (-20), (-300), (-4000);

Berechnen Sie Minhash-Informationen für das anfängliche Dataset:

CREATE TABLE minhash_a_1 (mh) AS SELECT MINHASH(100, i) FROM ta;
CREATE TABLE minhash_b (mh) AS SELECT MINHASH(100, i) FROM tb;
CREATE TABLE minhash_c (mh) AS SELECT MINHASH(100, i) FROM tc;

Fügen Sie weitere Daten zu einer der Tabellen hinzu:

INSERT INTO ta (i) VALUES (12);

Demonstrate the MINHASH_COMBINE function:

CREATE TABLE minhash_a_2 (mh) AS SELECT MINHASH(100, i) FROM ta WHERE i > 10;

CREATE TABLE minhash_a (mh) AS
  SELECT MINHASH_COMBINE(mh)
    FROM (
      (SELECT mh FROM minhash_a_1)
      UNION ALL
      (SELECT mh FROM minhash_a_2)
    );

This query shows the approximate similarity of the two similar tables (ta and tb):

SELECT APPROXIMATE_SIMILARITY(mh)
  FROM (
    (SELECT mh FROM minhash_a)
    UNION ALL
    (SELECT mh FROM minhash_b)
  );
+-----------------------------+
| APPROXIMATE_SIMILARITY (MH) |
|-----------------------------|
|                        0.75 |
+-----------------------------+

This query shows the approximate similarity of the two very different tables (ta and tc):

SELECT APPROXIMATE_SIMILARITY(mh)
  FROM (
    (SELECT mh FROM minhash_a)
    UNION ALL
    (SELECT mh FROM minhash_c)
  );
+-----------------------------+
| APPROXIMATE_SIMILARITY (MH) |
|-----------------------------|
|                           0 |
+-----------------------------+