Categorias:

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

APPROXIMATE_SIMILARITY

Retorna uma estimativa da similaridade (índice de Jaccard) das entradas com base em seus estados MinHash. Para obter mais informações sobre os estados MinHash, consulte Estimativa da similaridade de dois ou mais conjuntos.

Aliases:

APPROXIMATE_JACCARD_INDEX

Consulte também:

MINHASH , MINHASH_COMBINE

Sintaxe

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

APPROXIMATE_SIMILARITY(*)
Copy

Argumentos

expr

A(s) expressão(ões) deve(m) ser um ou mais estados de MinHash retornados por chamadas para a função MINHASH. Em outras palavras, as expressões devem ser informações de estado de MinHash, não a coluna ou expressão para a qual se deseja a similaridade aproximada. (O exemplo abaixo ajuda a esclarecer isso).

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

Retornos

Um número de ponto flutuante entre 0,0 e 1,0 (inclusive), onde 1,0 indica que os conjuntos são idênticos, e 0,0 indica que os conjuntos não têm sobreposição.

Notas de uso

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

  • Os estados de entrada MinHash devem ter matrizes MinHash de comprimento igual.

  • O comprimento da matriz dos estados de entrada MinHash é um indicador da qualidade da aproximação.

    Quanto maior o valor de k usado na função MINHASH, melhor será a aproximação. Entretanto, este valor tem um impacto linear no tempo de cálculo para estimar a similaridade.

Exemplos

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

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