hive collect\u list()不收集空值

i5desfxk  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(551)

我想收集一篇专栏文章 NULL 在那一列中有一些值…但是 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]

我希望有一个Hive解决方案,看起来像这样 [0.9, NULL, NULL, 0.7, 0.6] 在应用collect\u列表之后。

5sxhfpxr

5sxhfpxr1#

注意:如果您的列是字符串,那么即使您的外部文件没有该列的任何数据,它也不会有空值
您可以使用类似“col3为null且col3不为null”的验证检查来创建where条件

2eafrhcq

2eafrhcq2#

这个函数是这样工作的,但我发现了以下解决方法。在查询中添加case-when语句以检查并保留空值。

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

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

相关问题