HIVE 中 MAX、MIN 函数中的 NULL

Vai*_*hak 3 hadoop hive bigdata hdfs

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

id    values
A     1
B     3
C     NULL
Run Code Online (Sandbox Code Playgroud)

那么MAX(values)应该返回NULL

gob*_*s14 5

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

数据

key     val
-----------
A       1
A       NULL
B       3  
B       2
C       NULL
C       10
C       4
Run Code Online (Sandbox Code Playgroud)

查询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;
Run Code Online (Sandbox Code Playgroud)

您还可以使用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;
Run Code Online (Sandbox Code Playgroud)

输出

key    col_max
--------------
A      NULL 
B      3 
C      NULL
Run Code Online (Sandbox Code Playgroud)