sql >> Databasteknik >  >> RDS >> Mysql

Hive-hashfunktion som resulterar i 0,null och 1, varför?

Hashfunktionen returnerar endast 0 när alla angivna argument är tomma eller null.

Om du är bekant med Java kan du kontrollera implementeringen av hashfunktion .

Hashfunktionen använder internt ObjectInspectorUtils.hashCode för att få hashkoden för de angivna fälten, använd nedanstående java-kodavsnitt för att manuellt testa problemet:

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-beroenden som krävs för att köra programmet ovan:

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



  1. kör .sql-filen med kommandoraden

  2. Skapa användare från strängvariabler i ett PL/SQL-block

  3. Undvik et-tecken i PL/SQL-utvecklare

  4. Hur binder man ISO8601 TSQL DATETIME parameter med PDO?