Mysql
 sql >> Base de données >  >> RDS >> Mysql

Fonction de hachage Hive résultant en 0, null et 1, pourquoi ?

La fonction de hachage renvoie 0 uniquement lorsque tous les arguments fournis sont vides ou nuls.

Si vous êtes familier avec Java, vous pouvez vérifier l'implémentation de fonction de hachage .

La fonction de hachage utilise en interne ObjectInspectorUtils.hashCode pour obtenir le hashCode pour les champs fournis, utilisez l'extrait de code Java ci-dessous pour tester manuellement ce problème :

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) );
    }
}

Dépendances Maven requises pour exécuter le programme ci-dessus :

<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>