Catégories :

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

MINHASH_COMBINE

Combine les états d’entrée MinHash en un seul état de sortie MinHash. Cet état Minhash peut ensuite être entré dans la fonction APPROXIMATE_SIMILARITY pour estimer la similarité avec les autres états MinHash.

Cela permet des cas d’utilisation dans lesquels MINHASH est exécuté sur des ensembles de lignes horizontaux de la même table, générant un état MinHash pour chaque ensemble de lignes. Ces états peuvent ensuite être combinés à l’aide de MINHASH_COMBINE, produisant le même état de sortie qu’une seule exécution de MINHASH sur la table entière.

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

Voir aussi :

MINHASH

Syntaxe

MINHASH_COMBINE( [ DISTINCT ] <state> )

Notes sur l’utilisation

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

  • L’entrée MinHash état doit comporter des tableaux MinHash de même longueur.

Exemples

USE SCHEMA snowflake_sample_data.tpch_sf1;

SELECT MINHASH_COMBINE(mh) FROM
    (
      (SELECT MINHASH(5, c2) mh FROM orders WHERE c2 <= 10000)
        UNION
      (SELECT MINHASH(5, c2) mh FROM orders WHERE c2 > 10000 AND c2 <= 20000)
        UNION
      (SELECT MINHASH(5, C2) mh FROM orders WHERE c2 > 20000)
    );

+-----------------------+
| MINHASH_COMBINE(MH)   |
|-----------------------|
| {                     |
|   "state": [          |
|     628914288006793,  |
|     1071764954434168, |
|     991489123966035,  |
|     2395105834644106, |
|     680224867834949   |
|   ],                  |
|   "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 |
+-----------------------------+