sql - Hive - collect_list 有多列?

标签 sql hive

说我的表是这样的:

Name,Subject,Score
Jon,English,80
Amy,Geography,70
Matt,English,90
Jon,Math,100
Jon,History,60
Amy,French,90

有没有办法使用collect_list这样我就可以得到我的查询:
Jon: English:80; Math:100; History:60
Amy: Geography:70; French:90
Matt: English:90

编辑:

这里的复杂之处在于 collect_list UDF 只允许一个参数,即一列。
就像是
SELECT name, collect_list(subject), collect_list(score) from mytable group by name

结果是
Jon          |    [English,Math,History]       |     [80,100,60]
Amy          |    [Geography,French]           |     [70,90]
Matt         |    [English]                    |     [90]

最佳答案

不确定这是否是您所需要的。

select * from t0;

+-------+------------+-------+--+
| t0.a  |    t0.b    | t0.c  |
+-------+------------+-------+--+
| Jon   | English    | 80    |
| Amy   | Geography  | 70    |
| Matt  | English    | 90    |
| Jon   | Math       | 100   |
| Jon   | History    | 60    |
| Amy   | French     | 90    |
+-------+------------+-------+--+

select a, collect_list(concat_ws(':',b,cast(c as string))) from t0 group by a;

+-------+-----------------------------------------+--+
|   a   |                   _c1                   |
+-------+-----------------------------------------+--+
| Amy   | ["Geography:70","French:90"]            |
| Jon   | ["English:80","Math:100","History:60"]  |
| Matt  | ["English:90"]                          |
+-------+-----------------------------------------+--+

关于sql - Hive - collect_list 有多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48649856/

相关文章:

mysql - 挑战!复杂的 MySQL 查询

mysql - 在 SQL 中连接表

sql - 用“ALL”代替“Group By”和“Having”查询

sql - 为什么我的 SQL SUM 在包含 NULL 值时不返回 NULL?

hadoop - Hive 中有很多分区

docker - Sqoop - 导入作业失败

mysql - 具有多个左连接的查询花费太长时间

hadoop - 如何从HIVE中的一个选择导出多个文件

hadoop - 如何配置MR作业中的 map 以批量执行?

java - 当有大约 100 万条记录时,如何在 Java 中比较 Hive 和 Cassandra 数据