Объединить несколько строк в одну строку через пробел - PullRequest
13 голосов
/ 13 сентября 2010

Таким образом, у меня есть 5 строк, как это

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

Как бы я сделал запрос, чтобы он выглядел так

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

Ответы [ 5 ]

42 голосов
/ 29 февраля 2012

В улье вы можете использовать

SELECT userid, collect_set(combined) FROM tabel GROUP BY user_id;

collect_set удаляет дубликаты. Если вам нужно сохранить их, вы можете проверить этот пост:

COLLECT_SET () в Hive, сохранить дубликаты?

14 голосов
/ 13 сентября 2010

Используйте агрегатную функцию 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
3 голосов
/ 22 января 2017
SELECT 
  userid,
  concat_ws(" ", collect_set(col)) AS combined
FROM table 
GROUP BY userid
0 голосов
/ 03 января 2019
  1. MySQL с дубликатами: select col1, group_concat(col2) from table1 group by col1
  2. MySQL без дубликатов: select col1, group_concat(distinct col2) from table1 group by col1
  3. Hive с дубликатами: select col1, collect_list(col2) from table1 group by col1
  4. Hive без дубликатов: select col1, collect_set(col2) from table1 group by col1
0 голосов
/ 14 сентября 2010

Я уверен, что вы не можете сделать это с помощью Hive QL.Однако это должно быть возможно, если вы пишете свои собственные сценарии Map / Reduce - для начала ознакомьтесь с этим руководством .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...