카테고리:

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

MINHASH

k 개의 서로 다른 해시 함수를 입력 행에 적용하고 각 해시 함수의 최솟값을 유지하여 구성된 크기 k 의 배열을 포함하는 MinHash 상태를 반환합니다. 그런 다음 이 MinHash 상태는 APPROXIMATE_SIMILARITY 함수에 입력되어, 하나 이상의 다른 MinHash 상태와의 유사성을 추정할 수 있습니다.

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

참고 항목:

MINHASH_COMBINE

구문

집계 함수

MINHASH( <k> , [ DISTINCT ] expr+ )

MINHASH( <k> , * )
Copy

윈도우 함수

MINHASH( <k> , [ DISTINCT ] expr+ ) OVER ( [ PARTITION BY <expr1> ] )

MINHASH( <k> , * ) OVER ( [ PARTITION BY <expr1> ] )
Copy

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

인자

k

생성할 해시 함수의 수입니다. 값이 클수록 근사치가 더 좋습니다. 그러나 이 값은 APPROXIMATE_SIMILARITY를 사용하여 유사성을 추정하기 위한 계산 시간에 선형 영향을 미칩니다. 제안된 값은 100입니다. 최대값은 1024입니다.

expr

해시할 값을 결정하는 하나 이상의 식(일반적으로 열 이름)입니다.

*

입력 행의 모든 열을 해시합니다.

사용법 노트

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

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

USE SCHEMA snowflake_sample_data.tpch_sf1;

SELECT MINHASH(5, *) FROM orders;

+----------------------+
| MINHASH(5, *)        |
|----------------------|
| {                    |
|   "state": [         |
|     78678383574307,  |
|     586952033158539, |
|     525995912623966, |
|     508991839383217, |
|     492677003405678  |
|   ],                 |
|   "type": "minhash", |
|   "version": 1       |
| }                    |
+----------------------+
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