카테고리:

: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> , * )

윈도우 함수

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

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

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

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