Hive UDF,Java 原语和 null

Hive UDFs, Java Primitives and null

在 E. Capriolo 等人编写的 Programming Hive 的第 168 页上,它指出“...在 Java 中,原语不是对象,不能为空。”因此,对于简单的 Hive UDF:

public class ConvertToCelcius extends UDF {
    public double evaluate(double value) {
        return (value - 32) / 1.8;
      }
}

如果遇到空行值会怎样?

此外,使用 Java 原语我们如何测试是否将 null 传递给了我们的 UDF?

据推测,我们可以将上面的内容重写为:

public class ConvertToCelcius extends UDF {
    public Double evaluate(Double value) {
        if (value == null) {
          return null;
        }
        return (value - 32) / 1.8;
      }
} 

我们可以仅使用基元数据类型创建 UDF,并在 sql Case 语句

中检查空值

select 
      CASE WHEN columnName = null then null 
               else evaluate(columnName) end columnName
 From tabelName

注意:评估是 UDF 名称。