MAX中的NULL,HIVE中的MIN函数

Posted

技术标签:

【中文标题】MAX中的NULL,HIVE中的MIN函数【英文标题】:NULL in MAX,MIN function in HIVE 【发布时间】:2016-06-28 13:34:29 【问题描述】:

在 Hive 中计算 MAXMIN 函数时,我需要包含 NULL 值。例如,如果我有桌子:

id    values
A     1
B     3
C     NULL

那么MAX(values) 应该返回NULL

【问题讨论】:

这个解决方案对你有用吗? 【参考方案1】:

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

数据

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

查询0

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

【讨论】:

以上是关于MAX中的NULL,HIVE中的MIN函数的主要内容,如果未能解决你的问题,请参考以下文章

Hive分析窗体函数之SUM,AVG,MIN和MAX

Hive Sum MAX MIN聚合函数

查找列的 MIN / MAX,当同一张表中的其他列 DO / DONT 有 NULL

SQL MIN() 函数

SQL MIN() 函数

在EXCEL中,如何使用MAX和MIN函数