- 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:
Sintaxe¶
MINHASH( <k> , [ DISTINCT ] expr+ )
MINHASH( <k> , * )
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 |
| } |
+----------------------+
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);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;Adicionar mais dados a uma das tabelas:
INSERT INTO ta (i) VALUES (12);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) );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 | +-----------------------------+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 | +-----------------------------+