1

私が行った実験に基づいて、答えはノーだと思います。しかし、私は物事を正しく行っているかどうか確信が持てませんでした。

私の機能は次のとおりです。

select buyer_key, DBMS_UTILITY.get_hash_value(buyer_key||'|'||buyer_entity_id||'|'||buyer_io_id||'|'||buyer_line_item_id||'|'||is_billing_enabled||'|'||currency_id_b_trgt||'|'||currency_id_b_prfrd||'|'||ymdh_max,1,POWER(2,16)-1) as hashvalue from network_buyer_dim order by hashvalue asc;

実行すると、ハッシュキー値が重複する多数の行が返されます。しかし、データベースにアクセスしてそれらの行を見ると (ところで、各 buy_key は一意です)、行に同じ値が含まれていないことがわかります。

関数を正しく呼び出していますか?

4

1 に答える 1

3

明らかにそうではありません!

ハッシュ関数は、キーと呼ばれる可変長の大きなデータ セットを固定長の小さなデータ セットにマップする任意のアルゴリズムまたはサブルーチンです。たとえば、可変長の人の名前は、単一の整数にハッシュできます。ハッシュ関数によって返される値は、ハッシュ値、ハッシュ コード、ハッシュ サム、チェックサム、または単にハッシュと呼ばれます。

これは、入力ドメイン セットのサイズが出力ドメイン セットのサイズよりも大きい場合、重複が発生することを意味します。

これに加えて、最良のハッシュ関数は、可能なすべての入力値に対して同じ数の重複出力値を与える傾向がある関数と見なされます。

于 2012-08-06T21:13:48.093 に答える