Kategorien:

Aggregatfunktionen (Ähnlichkeitsschätzung), Fensterfunktionen

MINHASH

Gibt einen MinHash-Status zurück, der ein Array der Größe k enthält, das durch Anwenden von k verschiedenen Hash-Funktionen auf die Eingabezeilen konstruiert wurde und das Minimum jeder Hash-Funktion behält. Dieser MinHash-Status kann dann in die Funktion APPROXIMATE_SIMILARITY eingegeben werden, um die Ähnlichkeit mit einem oder mehreren anderen MinHash-Status zu schätzen.

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

Siehe auch:

MINHASH_COMBINE

Syntax

MINHASH( <k> , [ DISTINCT ] expr+ )

MINHASH( <k> , * )
Copy

Nutzungshinweise

  • k gibt die Anzahl der Hashfunktionen an, die erstellt werden sollen. Je größer der Wert, desto besser die Näherung. Dieser Wert hat jedoch einen linearen Einfluss auf die Berechnungszeit für das Schätzen der Ähnlichkeit mit APPROXIMATE_SIMILARITY. Der empfohlene Wert beträgt 100.

    Der Maximalwert beträgt 1.024.

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

Beispiele

USE SCHEMA snowflake_sample_data.tpch_sf1;

SELECT MINHASH(5, *) FROM orders;

+----------------------+
| MINHASH(5, *)        |
|----------------------|
| {                    |
|   "state": [         |
|     78678383574307,  |
|     586952033158539, |
|     525995912623966, |
|     508991839383217, |
|     492677003405678  |
|   ],                 |
|   "type": "minhash", |
|   "version": 1       |
| }                    |
+----------------------+
Copy

Hier ist ein ausführlicheres Beispiel mit den drei verwandten Funktionen MINHASH, MINHASH_COMBINE und APPROXIMATE_SIMILARITY. In diesem Beispiel werden 3 Tabellen (ta, tb und tc) erstellt, von denen zwei (ta und tb) ähnlich und zwei (ta und tc) völlig verschieden sind.

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 values into the 3 tables.
INSERT INTO ta (i) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
-- Almost the same as the preceding values.
INSERT INTO tb (i) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (11);
-- Different values and different number of values.
INSERT INTO tc (i) VALUES (-1), (-20), (-300), (-4000);
Copy

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;
Copy

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

INSERT INTO ta (i) VALUES (12);
Copy

Verwendungsbeispiel für die Funktion MINHASH_COMBINE:

-- Record minhash information about only the new rows:
CREATE TABLE minhash_a_2 (mh) AS SELECT MINHASH(100, i) FROM ta WHERE i > 10;

-- Now combine all the minhash info for the old and new rows in table ta.
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)
    );
Copy

Diese Abfrage zeigt die ungefähre Ähnlichkeit der beiden ähnlichen Tabellen (ta und tb):

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

Diese Abfrage zeigt die ungefähre Ähnlichkeit der beiden sehr unterschiedlichen Tabellen (ta und tc):

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