8

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

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]

我希望[0.9, NULL, NULL, 0.7, 0.6]在应用 collect_list 后有一个类似这样的配置单元解决方案。

4

2 回答 2

7

这个函数是这样工作的,但我找到了以下解决方法。在查询中添加case when语句以检查并保留 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'),所以整个结果集是一个字符串数组。最后,只需将字符串数组转换为双精度值数组。

于 2015-08-12T14:44:30.733 回答
0

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

您可以使用验证检查的 where 条件,例如“col3 is NULL and col3 is not NULL”

于 2015-08-12T07:30:44.303 回答