Catégories :

Fonctions d’agrégation (estimation de la similarité), Fonctions de la fenêtre

MINHASH

Renvoie un état MinHash contenant un tableau de taille k construit en appliquant un nombre k de fonctions de hachage différentes aux lignes d’entrée et en maintenant chaque fonction de hachage au seuil minimum. Cet état MinHash peut ensuite être entré dans la fonction APPROXIMATE_SIMILARITY pour estimer la similarité avec un ou plusieurs autres états MinHash.

Pour plus d’informations sur les états MinHash, voir Estimation de la similarité de deux ensembles ou plus.

Voir aussi :

MINHASH_COMBINE

Syntaxe

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

MINHASH( <k> , * )

Notes sur l’utilisation

  • k spécifie le nombre de fonctions de hachage à créer. Plus la valeur est grande, meilleure est l’approximation ; Cependant, cette valeur a un impact linéaire sur le temps de calcul pour l’estimation de la similarité à l’aide de APPROXIMATE_SIMILARITY. La valeur suggérée est 100.

    La valeur maximale est 1024.

  • DISTINCT peut être inclus comme argument, mais n’a aucun effet.

Exemples

USE SCHEMA snowflake_sample_data.tpch_sf1;

SELECT MINHASH(5, *) FROM orders;

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

Voici un exemple plus détaillé montrant les trois fonctions connexes MINHASH, MINHASH_COMBINE et APPROXIMATE_SIMILARITY. Cet exemple crée 3 tables (ta, tb et tc), dont deux (ta et tb) sont similaires et deux (ta et tc) sont complètement différentes.

Créer et remplir des tables avec des valeurs :

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

Calculer les informations minhash pour l’ensemble initial de données :

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;

Ajouter plus de données à l’une des tables :

INSERT INTO ta (i) VALUES (12);

Démontrer la fonction 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)
    );

Cette requête montre la similarité approximative des deux tables similaires (ta et tb) :

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

Cette requête montre la similarité approximative des deux tables très différentes (ta et tc) :

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