Tous les produits
Search
Centre de documentation

MaxCompute:WM_CONCAT

Dernière mise à jour :Aug 20, 2026

Concatène les valeurs de la colonne colname à l'aide d'un délimiteur spécifié par le paramètre separator.

Notes d'utilisation

  • MaxCompute V2.0 introduit de nouvelles fonctions étendues. Si les fonctions utilisées impliquent de nouveaux types de données, notamment TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP et BINARY, vous devez exécuter une instruction pour activer l'édition des types de données MaxCompute V2.0 :

    • Au niveau de la session : ajoutez SET odps.sql.type.system.odps2=true; avant l'instruction SQL à exécuter, puis soumettez et exécutez l'ensemble.

    • Au niveau du projet : le propriétaire du projet peut activer l'édition des types de données MaxCompute V2.0 selon les besoins du projet. Instruction :

      setproject odps.sql.type.system.odps2=true;

      La configuration prend effet après 10 à 15 minutes.

      Pour plus d'informations sur setproject, consultez la rubrique Opérations sur les projets. Pour connaître les précautions à prendre lors de l'activation de l'édition des types de données MaxCompute V2.0 au niveau du projet, reportez-vous au Guide des versions des types de données.

  • L'utilisation d'une instruction SQL contenant plusieurs fonctions d'agrégation avec des ressources de projet insuffisantes peut provoquer un dépassement de mémoire. Nous vous recommandons d'optimiser l'instruction SQL ou d'acheter des ressources de calcul supplémentaires si nécessaire.

Syntaxe

string wm_concat(string <separator>, string <colname>)

Paramètres

  • separator : obligatoire. Délimiteur, qui doit être une constante de type STRING.

  • colname : obligatoire. Valeur de type STRING. Si la valeur d'entrée est de type BIGINT, DOUBLE ou DATETIME, elle est implicitement convertie en type STRING avant le calcul.

Remarque

Si vous utilisez la fonction WM_CONCAT conjointement avec l'expression within group (order by <col1>[,<col2>…]) et le mot-clé DISTINCT, vous devez respecter la syntaxe de la fonction. Pour plus d'informations sur la syntaxe des fonctions d'agrégation, consultez la section Syntaxe.

Valeur de retour

Cette fonction s'utilise avec la clause GROUP BY. La clause ORDER BY n'est pas spécifiée.

Renvoie une valeur de type STRING. La valeur de retour varie selon les règles suivantes :

  • Si la valeur de separator n'est pas une constante de type STRING, une erreur est renvoyée.

  • Si la valeur de colname n'est pas de type STRING, BIGINT, DOUBLE ou DATETIME, une erreur est renvoyée.

  • Si la valeur de colname est null, la ligne contenant cette valeur n'est pas prise en compte dans le calcul.

Remarque

Si table_name dans l'instruction select wm_concat(',', name) from table_name; représente un ensemble vide, la valeur null est renvoyée.

Exemple de données

Cette section fournit des données source d'exemple et des illustrations pour vous aider à comprendre l'utilisation des fonctions. Créez une table nommée emp et insérez-y les données d'exemple. Instruction d'exemple :

CREATE TABLE IF NOT EXISTS emp
   (empno BIGINT,
    ename STRING,
    job STRING,
    mgr BIGINT,
    hiredate DATETIME,
    sal BIGINT,
    comm BIGINT,
    deptno BIGINT);
tunnel upload emp.txt emp;   --Replace emp.txt with the actual path (path and name) to which you upload the data file

Le fichier emp.txt contient les données d'exemple suivantes :

7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20
7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20
7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30
7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10
7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20
7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10
7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30
7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20
7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30
7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20
7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10
7948,JACCKA,CLERK,7782,1981-04-12 00:00:00,5000,,10
7956,WELAN,CLERK,7649,1982-07-20 00:00:00,2450,,10
7956,TEBAGE,CLERK,7748,1982-12-30 00:00:00,1300,,10

Exemples

  • Exemple 1 : concaténez les valeurs de la colonne ename de tous les employés. Instruction d'exemple :

    select wm_concat(',', ename) from emp;

    Le résultat suivant est renvoyé :

    +------------+
    | _c0        |
    +------------+
    | SMITH,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS,JAMES,FORD,MILLER,JACCKA,WELAN,TEBAGE |
    +------------+
  • Exemple 2 : utilisez cette fonction avec GROUP BY pour regrouper tous les employés par département (deptno) et concaténer les noms (ename) des employés de chaque département. Instruction d'exemple :

    select deptno, wm_concat(',', ename) from emp group by deptno order by deptno;

    Le résultat suivant est renvoyé :

    +------------+------------+
    | deptno     | _c1        |
    +------------+------------+
    | 10         | CLARK,KING,MILLER,JACCKA,WELAN,TEBAGE |
    | 20         | SMITH,JONES,SCOTT,ADAMS,FORD |
    | 30         | ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES |
    +------------+------------+
  • Exemple 3 : utilisez cette fonction avec GROUP BY pour regrouper tous les employés par département (deptno) et concaténer les valeurs de salaire des employés de chaque département après suppression des doublons. Instruction d'exemple :

    select deptno, wm_concat(distinct ',', sal) from emp group by deptno order by deptno;

    Le résultat suivant est renvoyé :

    +------------+------------+
    | deptno     | _c1        |
    +------------+------------+
    | 10         | 1300,2450,5000 |
    | 20         | 1100,2975,3000,800 |
    | 30         | 1250,1500,1600,2850,950 |
    +------------+------------+
  • Exemple 4 : utilisez cette fonction avec GROUP BY et ORDER BY pour regrouper tous les employés par département (deptno), concaténer les valeurs de salaire (sal) de tous les employés de chaque département et trier les valeurs de salaire (sal) dans un ordre spécifié. Instruction d'exemple :

    select deptno, wm_concat(',',sal) within group (order by sal) from emp group by deptno order by deptno;

    Le résultat suivant est renvoyé :

    +------------+------------+
    |deptno|_c1|
    +------------+------------+
    |10|1300,1300,2450,2450,5000,5000|
    |20|800,1100,2975,3000,3000|
    |30|950,1250,1250,1500,1600,2850|
    +------------+------------+
  • Exemple 5 : utilisez cette fonction avec GROUP BY et ORDER BY pour trier les colonnes spécifiées dans un ordre donné. Instruction d'exemple :

    SELECT
        g,
        wm_concat ('#', t) WITHIN GROUP (ORDER BY h DESC) AS t_t
    FROM
    VALUES ("24",1,10),
           ("234",2,100),
           ("555",1,20),
           ("123", 2,30),
           ("7",1,11),
           ("13",3,50) AS tmp (t,g,h)
    GROUP BY g;
    

    Le résultat suivant est renvoyé :

    +------+-----+
    | g    | t_t |
    +------+-----+
    | 1    | 555#7#24 |
    | 2    | 234#123 |
    | 3    | 13  |
    +------+-----+

Fonctions associées

WM_CONCAT est une fonction d'agrégation. Pour plus d'informations sur les fonctions utilisées pour calculer la valeur moyenne de plusieurs enregistrements d'entrée et pour agréger les paramètres, consultez la rubrique Fonctions d'agrégation.