Hive 在配置单元中的同一个表上联接
我在配置单元中有一个包含以下列的表Hive 在配置单元中的同一个表上联接,hive,hiveql,Hive,Hiveql,我在配置单元中有一个包含以下列的表 userid string attribute_name string attribute_value string 属性_name可以是年龄、性别等值。属性值是该名称的值,例如M表示性别。我想要的是一个表,它为每个userid提供一个特定属性名聚合的所有值。e、 例如,如果这是一个样本表 userid attribute_name attribute_value 1000
userid string
attribute_name string
attribute_value string
属性_name
可以是年龄、性别等值。属性值是该名称的值,例如M表示性别。我想要的是一个表,它为每个userid提供一个特定属性名聚合的所有值。e、 例如,如果这是一个样本表
userid attribute_name attribute_value
1000 gender M
1000 city Perth
1000 city Singapore
1001 gender F
1001 city Tokyo
1001 gender M
1002 city Bombay
我想买一个
1000 {M} {Perth, Singapore}
1001 {F,M} {Tokyo}
大括号只是为了清楚起见
我可以得到两个单独的表,然后可能做一个连接,但是我试图在一个步骤中完成它
select userid, count (DISTINCT table.attribute_value) as numgender, collect_set(table.attribute_value) as genders
从表中,属性_name==“性别”按表分组。userid
同样地,对于城市来说,它可以在单个查询中完成吗
select userid
,concat_ws(',',collect_list (case when attribute_name = 'gender' then attribute_value end)) as genders
,concat_ws(',',collect_list (case when attribute_name = 'city' then attribute_value end)) as cities
from mytable
group by userid
;
为了过滤出不带性别的用户ID-
having count (case when attribute_name = 'gender' then 1 end) > 0
如果我不想要genders为空的行,如上面示例中的1002所示,该怎么办。如何将其过滤掉?谢谢
having count (case when attribute_name = 'gender' then 1 end) > 0