MINHASH_COMBINE

MINHASH_COMBINE

입력 MinHash 상태를 단일 MinHash 출력 상태로 결합해요. 이 Minhash 상태는 APPROXIMATE_SIMILARITY 함수에 입력으로 제공되어 다른 MinHash 상태와의 유사성을 추정할 수 있어요. 이를 통해 같은 테이블의 가로 행 집합에 대해 MINHASH를 실행해 각 행 집합에 대한 MinHash 상태를 생성하는 사용 사례가 가능해져요. 이 상태들은 MINHASH_COMBINE을 사용해 결합될 수 있으며, 전체 테이블에 대해 MINHASH를 한 번 실행한 것과 같은 출력 상태가 생성돼요.

MinHash 상태에 대한 자세한 내용은 Estimating Similarity of Two or More Sets를 참고해요.

출처: Snowflake SQL Reference - MINHASH_COMBINE

본문

구문

집계 함수

MINHASH_COMBINE( [ DISTINCT ] <state> )

윈도우 함수

MINHASH_COMBINE( [ DISTINCT ] <state> ) OVER ( [ PARTITION BY <expr> ] )

OVER 절에 대한 자세한 내용은 Window function syntax and usage를 참고해요.

인자

  • MINHASH에 대한 호출로 생성된 MinHash 상태 정보를 포함하는 표현식이에요.
  • 입력 MinHash 상태는 길이가 같은 배열을 가져야 해요.

사용상 주의사항

  • 이 함수는 집계 함수 또는 윈도우 함수로 사용할 수 있어요.
  • DISTINCT는 인자로 포함될 수 있지만 효과는 없어요.

예시

USE SCHEMA snowflake_sample_data.tpch_sf1;

SELECT MINHASH_COMBINE(mh) FROM
    (
      (SELECT MINHASH(5, c2) mh FROM orders WHERE c2 <= 10000)
        UNION
      (SELECT MINHASH(5, c2) mh FROM orders WHERE c2 > 10000 AND c2 <= 20000)
        UNION
      (SELECT MINHASH(5, C2) mh FROM orders WHERE c2 > 20000)
    );

+-----------------------+
| MINHASH_COMBINE(MH)   |
|-----------------------+
| {                     |
|   "state": [          |
|     628914288006793,  |
|     1071764954434168, |
|     991489123966035,  |
|     2395105834644106, |
|     680224867834949   |
|   ],                  |
|   "type": "minhash",  |
|   "version": 1        |
| }                     |
+-----------------------+

여기 세 개의 관련 함수 MINHASH, MINHASH_COMBINE, APPROXIMATE_SIMILARITY를 보여주는 더 광범위한 예시가 있어요. 이 예시는 3개의 테이블(ta, tb, tc)을 만들고, 그 중 두 개(ta와 tb)는 비슷하며, 두 개(ta와 tc)는 완전히 다릅니다.

값이 있는 테이블을 만들고 채워요.

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

MINHASH_COMBINE 함수를 보여줘요.

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

이 쿼리는 두 개의 비슷한 테이블(ta와 tb)의 근사 유사성을 보여줘요.

SELECT APPROXIMATE_SIMILARITY(mh)
  FROM (
    (SELECT mh FROM minhash_a)
    UNION ALL
    (SELECT mh FROM minhash_b)
  );

+-----------------------------+
| APPROXIMATE_SIMILARITY (MH) |
|-----------------------------|
|                        0.75 |
+-----------------------------+

이 쿼리는 두 개의 매우 다른 테이블(ta와 tc)의 근사 유사성을 보여줘요.

SELECT APPROXIMATE_SIMILARITY(mh)
  FROM (
    (SELECT mh FROM minhash_a)
    UNION ALL
    (SELECT mh FROM minhash_c)
  );

+-----------------------------+
| APPROXIMATE_SIMILARITY (MH) |
|-----------------------------|
|                           0 |
+-----------------------------+

더 알아보기