Je ne parviens pas à concaténer un champ basé sur le numéro de séquence d'un identifiant spécifique.
id field1 1 acb 2 de
résultat attendu
id field1 seq number 1 a 1 1 b 3 1 c 2 2 d 1 2 e 2
3 Réponses :
Vous pouvez utiliser la fonction récursive pour obtenir le résultat souhaité. Mais rappelez-vous si la dimension de vos données est élevée, alors essayez une autre approche, car dans certaines langues (par exemple, SQL Server) le niveau d'imbrication de la fonction récursive n'est pas supérieur à 32!
Select ID, dbo.function(ID, Count(Field1)) From dbo.Errors Group By ID;
Et votre La fonction doit être invoquée en suivant:
Create Function function(@ID Int, @i Int) Returns VarChar(8000) As Begin -- variables for storing data and return values Declare @string VarChar(8000), @temp VarChar(8000) Select @i = @i-1, @string = Field1 + ', ' From dbo.Errors E1 Where Id = @ID And @i = (Select Count(*) From dbo.Errors E2 Where E2.Id = E1.Id and E2.Field1 <= E1.Field1); If @i > 0 Begin Exec @temp = dbo.function@ID, @i; -- concatenate values every time the funtion returns Set @string = @temp + @string End -- return the resulatant data; Return @r; End Go
J'espère que cela vous aidera!
Utilisez collect_list
pour agréger les chaînes dans un tableau et concat_ws
pour concaténer un tableau. collect_list
utilise ArrayList
, il conserve les données dans l'ordre dans lequel elles ont été insérées. Utilisez sort
dans la sous-requête avant collect_list
pour trier les valeurs insérées dans le tableau.
Test dans Hive:
OK id field1 1 acb 2 de
Résultat:
with s as --this is your data (select stack(5, 1,'a',1, 1,'b',3, 1,'c',2, 2,'d',1, 2,'e',2) as (id,field1,seq_number) ) select s.id, concat_ws('',collect_list(s.field1)) as field1 from (select s.id, s.field1, s.seq_number from s sort by s.seq_number) s --SORT is here group by s.id;
Merci beaucoup. la liste de collecte peut-elle également être utilisée dans impala? ou y a-t-il un substitut au même
@HimanshuGarg Non, malheureusement, Impala n'a pas la même fonction collect_list, Impala a group_concat. Lisez ce Jira sur la commande et les informations de version: issues.apache.org/jira/browse/IMPALA -1458 , il s'agit également de la documentation de group_concat: cloudera.com/documentation/enterprise/5-5-x/topics/...