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