在HIV中,MAX,MIN函数为NULL

时间:2016-06-28 13:34:29

标签: hadoop hive hdfs bigdata

我需要在Hive中计算NULLMAX函数时包含MIN值。例如,如果我有表:

id    values
A     1
B     3
C     NULL

然后MAX(values)应该返回NULL

1 个答案:

答案 0 :(得分:2)

您可以创建一个标记,表示您的密钥组中有NULL个。然后,您可以聚合新创建的列并查找是否存在您的标记,表示该组中至少有一个NULL

数据

key     val
-----------
A       1
A       NULL
B       3  
B       2
C       NULL
C       10
C       4

<强> Query0

SELECT key
  , CASE WHEN ARRAY_CONTAINS(cs, 1) THEN NULL ELSE m END AS col_max
FROM (
  SELECT key
    , MAX(val) AS m
    , COLLECT_SET(CASE WHEN val IS NULL THEN 1 ELSE 0 END) AS cs
  FROM database.table
  GROUP BY key ) x;

您也可以使用SUM()(或MAX())代替COLLECT_SET()

<强>查询1

SELECT key
  , CASE WHEN cs > 0 THEN NULL ELSE m END AS col_max
FROM (
  SELECT key
    , MAX(val) AS m
    , SUM(CASE WHEN val IS NULL THEN 1 ELSE 0 END) AS cs
  FROM database.table
  GROUP BY key ) x;

<强>输出

key    col_max
--------------
A      NULL 
B      3 
C      NULL