카테고리:

집계 함수 (유사성 추정) , 윈도우 함수

APPROXIMATE_SIMILARITY

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

별칭:

APPROXIMATE_JACCARD_INDEX

참고 항목:

MINHASH , MINHASH_COMBINE

구문

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

APPROXIMATE_SIMILARITY(*)
Copy

인자

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

다음은 세 가지 관련 함수 MINHASH, MINHASH_COMBINE, APPROXIMATE_SIMILARITY 를 보여주는 보다 광범위한 예입니다. 이 예는 테이블 3개(ta, tb, tc)를 만들며, 그중 2개(ta 및 tb)는 유사하고 2개(ta 및 tc)는 완전히 다릅니다.

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

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

초기 데이터 세트에 대한 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;
Copy

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

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

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

이 쿼리는 유사한 테이블 두 개(ta 및 tb)의 대략적인 유사성을 보여줍니다.

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

이 쿼리는 매우 다른 테이블 두 개(ta 및 tc)의 대략적인 유사성을 보여줍니다.

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