- Categorias:
Funções de agregação (estimativa de similaridade) , funções de janela (estimativa de similaridade)
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¶
Função de agregação
MINHASH( <k> , [ DISTINCT ] expr+ )
MINHASH( <k> , * )
Função de janela
MINHASH( <k> , [ DISTINCT ] expr+ ) OVER ( [ PARTITION BY <expr1> ] )
MINHASH( <k> , * ) OVER ( [ PARTITION BY <expr1> ] )
Para detalhes sobre a cláusula OVER, consulte Sintaxe e uso da função de janela.
Argumentos¶
kO 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.
exprUma ou mais expressões (normalmente nomes de colunas) que determinam os valores para hash.
*Hash de todas as colunas nas linhas de entrada.
Notas de uso¶
Esta função pode ser usada como uma função de agregação ou uma função de janela.
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 | +-----------------------------+