카테고리:

:doc:`/sql-reference/functions-aggregation`(유사성 추정), :doc:`윈도우 함수 </sql-reference/functions-window-syntax>`(유사성 추정)

MINHASH_COMBINE

입력 MinHash 상태를 단일 MinHash 출력 상태로 결합합니다. 그런 다음 이 Minhash 상태는 APPROXIMATE_SIMILARITY 함수에 입력되어, 다른 MinHash 상태와의 유사성을 추정할 수 있습니다.

이를 통해, MINHASH가 동일 테이블의 수평 행 세트에 대해 실행되어 각 행 세트에 대해 MinHash 상태를 생성하는 사용 사례가 가능해집니다. 그런 다음 이러한 상태는 MINHASH_COMBINE 을 사용하여 결합되어, 전체 테이블에 대해 MINHASH 의 단일 실행과 동일한 출력 상태를 생성할 수 있습니다.

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

참고 항목:

MINHASH

구문

집계 함수

MINHASH_COMBINE( [ DISTINCT ] <state> )

윈도우 함수

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

OVER 절에 대한 자세한 내용은 윈도우 함수 구문 및 사용법 섹션을 참조하세요.

인자

state

MINHASH 호출에 의해 생성된 MinHash 상태 정보를 포함하는 식입니다. 입력 MinHash 상태에는 길이가 동일한 배열이 있어야 합니다.

사용법 노트

  • 이 함수는 집계 함수 또는 :doc:`윈도우 함수 </sql-reference/functions-window-syntax>`로 사용할 수 있습니다.

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

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