需要将配置单元表中的数据合并到一行中。其目的是捕获数据/值,而不是 'N'
i、 e.除了 'N'
应该为所有的 'col1'
价值观
表1:
col1 col2 col3 col4 col5 col6
-----------------------------
GHY BG Q N N N
GHY BG N T N N
GHY BG N N A N
GHY BG N N N Z
尝试以下查询:
Select col1, col2,array(
max(CASE WHEN col3 == 'Q' THEN 'Q' ELSE 'None' END),
max(CASE WHEN col4 == 'T' THEN 'T' ELSE 'None' END),
max(CASE WHEN col5 == 'A' THEN 'A' ELSE 'None' END),
max(CASE WHEN col6 == 'Z' THEN 'Z' ELSE 'None' END))
FROM table1 GROUP BY col1,col2;
得到以下信息:
实际o/p:
GHY BG ['None','None','A','None']
预期o/p:
GHY BG ['Q','T','A','Z']
没有得到错误点:(
更新\u 1:
从查询中删除“max”后:
FAILED: SemanticException [Error 10025]: Line 2:11 Expression not in GROUP BY key 'Q'
更新\u 2:
select col1,col2,collect_set(col)
from (select col1,col2,t.col
from tbl
lateral view explode(array(col3,col4,col5,col6)) t as col
where t.col <> 'N'
) t
错误:
FAILED: SemanticException [Error 10025]: Line 1:7 Expression not in GROUP BY key 'col1'
3条答案
按热度按时间toiithl61#
使用
explode
为col1、col2的组合获取每列一行,并使用collect_set
.uqzxnwby2#
此查询生成预期结果:
结果:
9njqaruj3#
另一种可能的解决方案(受提供的方案启发)是:
注:
max()
将选取最大值。因此,您可能需要将不需要的值更改为'aa'
. 否则,可能会选取其他值。例1:
结果:
例2:
结果: