Welche Art von Hash-Algorithmus wird in der integrierten HASH () - Funktion verwendet?
Ich suche idealerweise nach einem SHA512 / SHA256-Hash, ähnlich dem, was die SHA () - Funktion innerhalb der Linkedin-Datafu-UDFs für Pig bietet.
HASH
function (ab Hive 0.11) verwendet einen ähnlichen Algorithmus wie java.util.List # hashCode .
Der Code sieht so aus:
%Vor%Grundsätzlich ist es ein klassischer Hash-Algorithmus, wie er im Buch Effective Java empfohlen wird. Um einen großen Mann (und ein großes Buch ) zu zitieren:
Der Wert 31 wurde gewählt, weil es eine ungerade Primzahl ist. Wenn es so wäre und die Multiplikation übergelaufen, Information würde verloren gehen, als Multiplikation mit 2 entspricht der Verschiebung. Der Vorteil der Verwendung Ein Prime ist weniger klar, aber es ist traditionell. Eine nette Eigenschaft von 31 ist dass die Multiplikation durch eine Verschiebung und eine Subtraktion ersetzt werden kann für eine bessere Leistung: 31 * i == (i & lt; & lt; 5) - i. Moderne VMs tun dies Art der Optimierung automatisch.
Ich schweife ab. Sie können sich die Quelle HASH
ansehen hier .
Wenn Sie SHAxxx in Hive verwenden möchten, können Sie Apache DigestUtils Klasse und Hive integrierte reflect
Funktion (ich hoffe, dass es funktioniert):