Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hive-Hash-Funktion, die zu 0, null und 1 führt, warum?

Die Hash-Funktion gibt nur dann 0 zurück, wenn alle angegebenen Argumente leer oder null sind.

Wenn Sie mit Java vertraut sind, können Sie die Implementierung von Hash-Funktion .

Die Hash-Funktion verwendet intern ObjectInspectorUtils.hashCode Um den HashCode für die bereitgestellten Felder zu erhalten, verwenden Sie das folgende Java-Code-Snippet, um dieses Problem manuell zu testen:

import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.apache.hadoop.io.Text;
public class TestHash 
{
    public static void main( String[] args )
    {
        System.out.println( ObjectInspectorUtils.hashCode(null,PrimitiveObjectInspectorFactory.javaStringObjectInspector) );
        System.out.println( ObjectInspectorUtils.hashCode(new Text(""),PrimitiveObjectInspectorFactory.javaStringObjectInspector) );
    }
}

Maven-Abhängigkeiten, die zum Ausführen des obigen Programms erforderlich sind:

<dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.2</version>
        </dependency>