我需要在Hive中计算NULL
和MAX
函数时包含MIN
值。例如,如果我有表:
id values
A 1
B 3
C NULL
然后MAX(values)
应该返回NULL
。
答案 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