2016-07-27 72 views
0

我使用hive 0.13.1和散列組合使用默認配置單元散列函數的鍵。Hive哈希函數導致0,null和1,爲什麼?

類似 從table1中選擇hash(date,token1,token2,parameters [「a」],parameters [「b」],parameters [「c」]);

我跑了150M行。對於60%的行,它正確地散列它。對於其餘的行,它給出0. null或1作爲散列。我看着導致壞散列的行,我沒有看到行有任何問題。什麼可能導致它?

+0

也許你可以提供一個沒有做到你想要的哈希的例子。它現在很難回答這個問題。 – gobrewers14

回答

0

僅當所有提供的參數爲空或空時,哈希函數才返回0。

如果您熟悉Java,那麼您可以檢查執行hash function

散列函數在內部使用ObjectInspectorUtils.hashCode得到哈希碼所提供的字段中,使用下面的java代碼段手動測試此問題:

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依賴於上述程序運行所需的:

<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> 
相關問題