web-dev-qa-db-fra.com

Concattez plusieurs lignes avec un délimiteur dans la ruche

J'ai besoin de concaténer les valeurs de chaîne avec "~" comme délimiteur. J'ai les données suivantes:

enter image description here

J'ai besoin de concaténer la colonne 'Commentaire' pour chaque 'id' dans l'ordre croissant de 'row_id' avec '~' comme délimiteur.

La sortie attendue est la suivante:

enter image description here

GROUP_CONCAT n'est pas une option car il n'est pas reconnu dans ma version Hive. Je peux utiliser collect_set ou collect_list, mais je ne pourrai pas insérer de délimiteur entre les deux.

Y a-t-il une solution de contournement?

12
Vaishak

collect_list renvoie un tableau, pas une chaîne.
Le tableau peut être converti en chaîne délimitée en utilisant concat_ws.


Cela fonctionnera, sans ordre spécifique de commentaires.

select      id
           ,concat_ws('~',collect_list(comment)) as comments

from        mytable 

group by    id
;

+----+-------------+
| id |  comments   |
+----+-------------+
|  1 | ABC~PRQ~XYZ |
|  2 | LMN~OPQ     |
+----+-------------+
19