MINHASH
MINHASH (유사도 추정)
입력 행들에 서로 다른 k개의 해시 함수를 적용하고 각 해시 함수의 최솟값을 유지함으로써 구성된 크기 k의 배열을 포함하는 MinHash 상태를 반환해요. 이 MinHash 상태는 APPROXIMATE_SIMILARITY 함수에 입력되어 하나 이상의 다른 MinHash 상태와의 유사도를 추정하는 데 사용될 수 있어요.
MinHash 상태에 대한 자세한 내용은 Estimating Similarity of Two or More Sets를 참고해요.
참조: MINHASH_COMBINE
본문
구문
집계 함수
MINHASH( <k>, [ DISTINCT ] expr+ )
MINHASH( <k>, * )
윈도우 함수
MINHASH( <k>, [ DISTINCT ] expr+ ) OVER ( [ PARTITION BY <expr1> ] )
MINHASH( <k>, * ) OVER ( [ PARTITION BY <expr1> ] )
OVER 절에 대한 자세한 내용은 Window function syntax and usage를 참고해요.
인자
k
만들 해시 함수의 수예요. 값이 클수록 근사가 더 좋지만, 이 값은 APPROXIMATE_SIMILARITY를 사용한 유사도 추정 계산 시간에 선형적인 영향을 미쳐요. 권장 값은 100이에요. 최대값은 1024예요.
expr
해시할 값을 결정하는 하나 이상의 표현식(일반적으로 열 이름)이에요.
*
입력 행의 모든 열을 해시해요.
사용상 주의사항
- 이 함수는 집계 함수 또는 윈도우 함수로 사용할 수 있어요.
- 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 |
| } |
+----------------------+
여기 세 개의 관련 함수 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 |
+-----------------------------+
더 알아보기
- Aggregate functions (Similarity Estimation) — 집계 함수 모음
- MINHASH_COMBINE — MinHash 상태 결합
- APPROXIMATE_SIMILARITY — 유사도 추정