MINHASH_COMBINE¶
入力 MinHash 状態を単一の MinHash 出力状態に結合します。このMinhash状態を APPROXIMATE_SIMILARITY 関数に入力して、他の MinHash 状態との類似性を推定できます。
これにより、同じテーブルの水平行セットで MINHASH を実行し、各行セットに対して MinHash 状態を生成するユースケースが可能になります。その後、これらの状態を MINHASH_COMBINE を使用して結合し、テーブル全体で MINHASH を1回実行するのと同じ出力状態を生成できます。
MinHash 状態の詳細については、 2つ以上のセットの類似性の推定 をご参照ください。
- こちらもご参照ください:
構文¶
MINHASH_COMBINE( [ DISTINCT ] <state> )
使用上の注意¶
DISTINCT を引数として含めることができますが、効果はありません。
入力MinHash
state
には、等しい長さの MinHash 配列が必要です。
例¶
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 |
| } |
+-----------------------+
こちらは、3つの関連する関数 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) );このクエリは、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 | +-----------------------------+このクエリは、2つの非常に異なるテーブル(ta、tc)のおおよその類似性を示しています。
SELECT APPROXIMATE_SIMILARITY (mh) FROM ( (SELECT mh FROM minhash_a) UNION ALL (SELECT mh FROM minhash_c) ); +-----------------------------+ | APPROXIMATE_SIMILARITY (MH) | |-----------------------------| | 0 | +-----------------------------+