APPROXIMATE_SIMILARITY¶
MinHash 상태를 기반으로 입력값의 유사성(Jaccard 인덱스) 추정치를 반환합니다. MinHash 상태에 대한 자세한 내용은 2개 이상 세트의 유사성 추정하기 를 참조하십시오.
- 별칭:
- 참고 항목:
구문¶
APPROXIMATE_SIMILARITY( [ DISTINCT ] <expr> [ , ... ] )
APPROXIMATE_SIMILARITY(*)
인자¶
expr
식은 MINHASH 함수 호출에 의해 반환된 하나 이상의 MinHash 상태여야 합니다. 즉, 식은 대략적인 유사성이 필요한 열 또는 식이 아니라
MinHash
상태 정보여야 합니다. (아래의 예는 이를 명확히 하는 데 도움이 됩니다.)MinHash 상태에 대한 자세한 내용은 2개 이상 세트의 유사성 추정하기 를 참조하십시오.
반환¶
0.0에서 1.0(포함) 사이의 부동 소수점 숫자입니다. 여기서 1.0은 세트가 동일함을 나타내고 0.0은 세트가 겹치지 않음을 나타냅니다.
사용법 노트¶
DISTINCT
는 인자로 포함될 수 있지만, 효과는 없습니다.입력 MinHash 상태에는 길이가 동일한 MinHash 배열이 있어야 합니다.
입력 MinHash 상태의 배열 길이는 근삿값 품질의 지표입니다.
MINHASH 함수에 사용된
k
값이 클수록 근삿값이 더 좋습니다. 그러나 이 값은 유사성 추정을 위한 계산 시간에 선형 영향을 미칩니다.
예¶
USE SCHEMA snowflake_sample_data.tpch_sf1;
SELECT APPROXIMATE_SIMILARITY(mh) FROM
(
(SELECT MINHASH(100, C5) mh FROM orders WHERE c2 <= 50000)
UNION
(SELECT MINHASH(100, C5) mh FROM orders WHERE C2 > 50000)
);
+----------------------------+
| APPROXIMATE_SIMILARITY(MH) |
|----------------------------|
| 0.97 |
+----------------------------+
다음은 세 가지 관련 함수 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);초기 데이터 세트에 대한 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
함수를 보여줍니다.-- 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) );이 쿼리는 유사한 테이블 두 개(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 | +-----------------------------+