Hive collect_list()不收集NULL值

时间:2015-08-12 04:56:21

标签: hadoop hive hive-udf

我正在尝试收集包含NULL s的列以及该列中的一些值...但collect_list会忽略NULL并仅收集其中包含值的值。有没有办法检索NULL和其他值?

SELECT col1, col2, collect_list(col3) as col3
FROM (SELECT * FROM table_1 ORDER BY col1, col2, col3)
GROUP BY col1, col2;

实际col3值

0.9
NULL
NULL
0.7
0.6 

产生的col3值

[0.9, 0.7, 0.6]

我希望在应用collect_list后,有一个hive解决方案看起来像[0.9, NULL, NULL, 0.7, 0.6]

2 个答案:

答案 0 :(得分:5)

这个功能是这样的,但我找到了以下解决方法。 在查询中添加 case 语句以检查并保留NULL。

SELECT col1, 
    col2, 
    collect_list(CASE WHEN col3 IS NULL THEN 'NULL' ELSE col3 END) as col3
FROM (SELECT * FROM table_1 ORDER BY col1, col2, col3)
GROUP BY col1, col2

现在,因为你有一个字符串元素('NULL'),所以整个结果集是一个字符串数组。 最后,只需将字符串数组转换为double值数组。

答案 1 :(得分:0)

注意:如果您的列是STRING,即使您的外部文件没有该列的任何数据,它也不会有NULL值

  

你可以在一个带有验证检查的where条件,例如" col3是NULL和   col3不是NULL"