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