Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Função de hash do Hive resultando em 0, null e 1, por quê?


A função hash retorna 0 somente quando todos os argumentos fornecidos estão em branco ou nulos.

Se você estiver familiarizado com Java, poderá verificar a implementação de função hash .

A função hash usa internamente ObjectInspectorUtils.hashCode para obter o hashCode para os campos fornecidos, use o trecho de código java abaixo para testar manualmente esse problema:
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) );
    }
}

Dependências do Maven necessárias para executar o programa acima:
<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>