카테고리:

집계 함수 (Similarity Estimation) , 윈도우 함수 구문 및 사용법

APPROXIMATE_SIMILARITY

MinHash 상태를 기반으로 입력값의 유사성(Jaccard 인덱스) 추정치를 반환합니다. MinHash 상태에 대한 자세한 내용은 2개 이상 세트의 유사성 추정하기 를 참조하십시오.

별칭:

APPROXIMATE_JACCARD_INDEX

참고 항목:

MINHASH , MINHASH_COMBINE

구문

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

APPROXIMATE_SIMILARITY(*)

인자

expr

식은 MINHASH 함수 호출에 의해 반환된 하나 이상의 MinHash 상태여야 합니다. 즉, 식은 대략적인 유사성이 필요한 열 또는 식이 아니라 MinHash 상태 정보여야 합니다. (아래의 예는 이를 명확히 하는 데 도움이 됩니다.)

MinHash 상태에 대한 자세한 내용은 2개 이상 세트의 유사성 추정하기 를 참조하십시오.

반환

0.0에서 1.0(포함) 사이의 부동 소수점 숫자입니다. 여기서 1.0은 세트가 동일함을 나타내고 0.0은 세트가 겹치지 않음을 나타냅니다.

사용법 노트

  • DISTINCT 는 인자로 포함될 수 있지만, 효과는 없습니다.

  • 입력 MinHash 상태에는 길이가 동일한 MinHash 배열이 있어야 합니다.

  • 입력 MinHash 상태의 배열 길이는 근삿값 품질의 지표입니다.

    MINHASH 함수에 사용된 k 값이 클수록 근삿값이 더 좋습니다. 그러나 이 값은 유사성 추정을 위한 계산 시간에 선형 영향을 미칩니다.

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

Here is a more extensive example, showing the three related functions MINHASH, MINHASH_COMBINE and APPROXIMATE_SIMILARITY. This example creates 3 tables (ta, tb, and tc), two of which (ta and tb) are similar, and two of which (ta and tc) are completely dissimilar.

값이 있는 테이블을 만들고 채웁니다.

CREATE TABLE ta (i INTEGER);
CREATE TABLE tb (i INTEGER);
CREATE TABLE tc (i INTEGER);

INSERT INTO ta (i) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
INSERT INTO tb (i) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (11);
INSERT INTO tc (i) VALUES (-1), (-20), (-300), (-4000);

초기 데이터 세트에 대한 minhash 정보를 계산합니다.

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;

테이블 중 하나에 더 많은 데이터를 추가합니다.

INSERT INTO ta (i) VALUES (12);

Demonstrate the MINHASH_COMBINE function:

CREATE TABLE minhash_a_2 (mh) AS SELECT MINHASH(100, i) FROM ta WHERE i > 10;

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

This query shows the approximate similarity of the two similar tables (ta and tb):

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

This query shows the approximate similarity of the two very different tables (ta and tc):

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