Categorias:

Funções de agregação (Estimativa de similaridade) , Funções de janela

MINHASH

Retorna um estado de MinHash contendo uma matriz de tamanho k construída pela aplicação de k número de diferentes funções de hash às linhas de entrada e mantendo o mínimo de cada função de hash. Este estado MinHash pode então ser introduzido na função APPROXIMATE_SIMILARITY para estimar a similaridade com um ou mais estados MinHash.

Para obter mais informações sobre os estados MinHash, consulte Estimativa da similaridade de dois ou mais conjuntos.

Consulte também:

MINHASH_COMBINE

Sintaxe

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

MINHASH( <k> , * )
Copy

Notas de uso

  • k especifica o número de funções de hash a serem criadas. Quanto maior o valor, melhor a aproximação; entretanto, este valor tem um impacto linear no tempo de cálculo para estimar a similaridade usando APPROXIMATE_SIMILARITY. O valor sugerido é 100.

    O valor máximo é 1024.

  • DISTINCT pode ser incluído como um argumento, mas não tem efeito.

Exemplos

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

Aqui está um exemplo mais amplo, mostrando as três funções relacionadas MINHASH, MINHASH_COMBINE e APPROXIMATE_SIMILARITY. Este exemplo cria 3 tabelas (ta, tb e tc), duas das quais (ta e tb) são similares, e duas das quais (ta e tc) são completamente diferentes.

Criar e preencher tabelas com valores:

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

Calcular as informações de minhash para o conjunto inicial de dados:

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

Adicionar mais dados a uma das tabelas:

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

Demonstrar a função 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

Esta consulta mostra a similaridade aproximada das duas tabelas semelhantes (ta e tb):

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

Esta consulta mostra a similaridade aproximada das duas tabelas muito diferentes (ta e tc):

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