Таким образом, у меня есть 5 строк, как это
userid, col -------------- 1, a 1, b 2, c 2, d 3, e
Как бы я сделал запрос, чтобы он выглядел так
userid, combined 1, a b 2, c d 3, e
В улье вы можете использовать
SELECT userid, collect_set(combined) FROM tabel GROUP BY user_id;
collect_set удаляет дубликаты. Если вам нужно сохранить их, вы можете проверить этот пост:
COLLECT_SET () в Hive, сохранить дубликаты?
Используйте агрегатную функцию GROUP_CONCAT :
SELECT yt.userid, GROUP_CONCAT(yt.col SEPARATOR ' ') AS combined FROM YOUR_TABLE yt GROUP BY yt.userid
Разделителем по умолчанию является запятая (","), поэтому для полученияжелаемый вывод.
Если вы хотите обеспечить порядок значений в GROUP_CONCAT, используйте:
SELECT yt.userid, GROUP_CONCAT(yt.col ORDER BY yt.col SEPARATOR ' ') AS combined FROM YOUR_TABLE yt GROUP BY yt.userid
SELECT userid, concat_ws(" ", collect_set(col)) AS combined FROM table GROUP BY userid
MySQL
select col1, group_concat(col2) from table1 group by col1
select col1, group_concat(distinct col2) from table1 group by col1
Hive
select col1, collect_list(col2) from table1 group by col1
select col1, collect_set(col2) from table1 group by col1
Я уверен, что вы не можете сделать это с помощью Hive QL.Однако это должно быть возможно, если вы пишете свои собственные сценарии Map / Reduce - для начала ознакомьтесь с этим руководством .