Catégories :

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

APPROXIMATE_SIMILARITY

Renvoie une estimation de la similarité (indice de Jaccard) des entrées sur la base de leurs états MinHash. Pour plus d’informations sur les états MinHash, voir Estimation de la similarité de deux ensembles ou plus.

Alias :

APPROXIMATE_JACCARD_INDEX

Voir aussi :

MINHASH , MINHASH_COMBINE

Syntaxe

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

APPROXIMATE_SIMILARITY(*)
Copy

Arguments

expr

L’expression doit être un ou plusieurs états MinHash renvoyés par des appels à la fonction MINHASH. En d’autres termes, les expressions doivent être des informations d’état MinHash et non la colonne ou l’expression pour lesquelles vous souhaitez une similarité approximative. (L’exemple ci-dessous permet de clarifier ce point.)

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

Renvoie

Nombre en virgule flottante compris entre 0,0 et 1,0 (inclus), où 1,0 indique que les ensembles sont identiques et 0,0 indique que les ensembles ne se chevauchent pas.

Notes sur l’utilisation

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

  • Les statuts MinHash d’entrée doivent avoir des tableaux MinHash de même longueur.

  • La longueur du tableau des statuts MinHash d’entrée est un indicateur de la qualité de l’approximation.

    Plus la valeur de k utilisée dans la fonction MINHASH est grande, meilleure est l’approximation. Cependant, cette valeur a un impact linéaire sur le temps de calcul nécessaire pour estimer la similarité.

Exemples

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

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

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

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

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

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

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

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