NULL中的MAX,MIN函数中的NULL

问题描述:

我需要包含NULL值,同时在Hive中计算MAXMIN函数。举例来说,如果我有表:NULL中的MAX,MIN函数中的NULL

id values 
A  1 
B  3 
C  NULL 

然后MAX(values)应该返回NULL

+0

为你做这个解决方案的工作? – gobrewers14

您可以创建一个标志,指出您的密钥组中有NULL s。然后,您可以聚合该新创建的列并查找是否存在您的标志,表示该组中至少有一个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