Więc mam 5 wierszy jak tenŁączenie wielu wierszy do jednej przestrzeni oddzielonej ciąg
userid, col
--------------
1, a
1, b
2, c
2, d
3, e
Jak zrobić kwerendę tak będzie wyglądać następująco
userid, combined
1, a b
2, c d
3, e
Więc mam 5 wierszy jak tenŁączenie wielu wierszy do jednej przestrzeni oddzielonej ciąg
userid, col
--------------
1, a
1, b
2, c
2, d
3, e
Jak zrobić kwerendę tak będzie wyglądać następująco
userid, combined
1, a b
2, c d
3, e
Użyj GROUP_CONCAT aggregate function:
SELECT yt.userid,
GROUP_CONCAT(yt.col SEPARATOR ' ') AS combined
FROM YOUR_TABLE yt
GROUP BY yt.userid
Domyślnym separatorem jest przecinek (","), więc musisz określić SEPARATOR pojedynczego spacji, aby uzyskać wyjście, którego pragniesz.
Jeśli chcesz mieć pewność, kolejność wartości w GROUP_CONCAT, użyj:
SELECT yt.userid,
GROUP_CONCAT(yt.col ORDER BY yt.col SEPARATOR ' ') AS combined
FROM YOUR_TABLE yt
GROUP BY yt.userid
jestem aktualnie używający Hive, więc nie mogę zrobić grupy po części, ponieważ GROUP_CONCAT nie jest rozpoznawany jako funkcja agregacji, w każdym razie wokół niego? – haoxu
@haoxu: Następną opcją (z SQL prespective) będzie kursor i konkatenacja ciągów, ale wymagałoby to funkcji MySQL. Nie znam Hive - czy nie ma możliwości użycia natywnego zapytania? –
Złożyłem wniosek JIRA dla GROUP_CONCAT w HiveQL: https://issues.apache.org/jira/browse/HIVE-1689 –
jestem całkiem pewny, że nie można tego zrobić za pomocą Hive QL. Jednak powinno to być możliwe, jeśli napiszesz własną mapę/zredukuj skrypty - aby rozpocząć, zobacz this tutorial.
odpowiedź jest nieaktualna. Nowsze wersje mają funkcje. –
W ulu można użyć
SELECT userid, collect_set(combined) FROM tabel GROUP BY user_id;
collect_set usuwa zduplikowane. Jeśli trzeba je przechowywać można sprawdzić tego posta:
dokładnie to, co chciałem! działa jak zaklęcie, aby połączyć wiersz z grupą za pomocą zapytania –
SELECT
userid,
concat_ws(" ", collect_set(col)) AS combined
FROM table
GROUP BY userid
Niemal dokładnie duplikat: http://stackoverflow.com/questions/2885709/sql-concatenate-rows-query –