2017-02-09 32 views
0

既存の関数を使用してのみUDFを記述することなく、ハイブで文字列のハッシュを計算します。だから私は他の言語で一貫したハッシュを得るために同様のアプローチを使用することができます。例えば:文字を追加したりXorを取ったりするなど、私が何かできることを使っている関数はありますか?Hiveで既存のハッシュ関数を使用せずにハッシュを計算する

+0

あなたのタイトルは「*存在しないハッシュfuction」*を使用していませんが、あなたの質問には「正しい関数を使って」*と書かれています。あなたは何をしたいですか? –

+0

あなたが使用しているHiveのバージョンとあなたが参照している他の言語に関してもっと具体的にする必要があります –

+0

"他の言語で一貫したハッシュを得るために同様のアプローチを使うことができるように"そうすれば、他の言語で計算しても似ている。だから私は他の言語でも複製することができる "他の"既存の関数を使って可能な最も簡単なハッシュを計算したい。例:私はASCII( "abc")%NoofBucketsを実行することができるように文字列をバケット化したいので、最初の文字のasciiを与えますが、バケットの分布はそれほど良くありません。だからもっと合理的なものが必要です。 –

答えて

1

これはHiveのバージョンによって異なります。 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Misc.Functions

select XYZ, hash(XYZ) from ABC
は、INT(32ビットのハッシュ)

select XYZ, crc32(XYZ) from ABC
はハイブ1.3必要とし、(おそらくjava.util.zip.CRC32経由)、昔ながらの巡回冗長検査を適用するを返す、年間の利用されてと、昔ながらのjava.lang.String.hashCode()適用されていますBIGINT(32ビットハッシュ)

select XYZ, md5(XYZ), sha1(XYZ), sha2(XYZ,256), sha2(XYZ,512) from ABC
を返すことハイブ1.3を必要とし、強力な適用、暗号のハッシュ関数、バイナリ(128、160、256、および512ビットのハッシュ)の16進表現を含む文字列を返す

[編集]回答that postにも用いて暗号ハッシュ関数を適用するための非常に良好な回避策を持っていますHiveの古いバージョン、Apache Commons静的メソッドとreflect()を使用しています。

関連する問題