Подтвердить что ты не робот

Объедините несколько строк в одну разделительную строку

Итак, у меня есть 5 строк, таких как

userid, col
--------------
1, a
1, b
2, c
2, d
3, e

Как бы я сделал запрос, чтобы он выглядел следующим образом:

userid, combined
1, a b
2, c d
3, e
4b9b3361

Ответ 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 - см. этот учебник, чтобы начать.