我正在尝试收集包含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]
。
答案 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"