Tous les produits
Search
Centre de documentation

MaxCompute:TRANS_ARRAY

Dernière mise à jour :Sep 08, 2026

Cette fonction définie par l'utilisateur (UDTF) renvoyant une table transpose une ligne unique en plusieurs lignes. Elle convertit un tableau, stocké dans une colonne sous forme de chaîne avec un séparateur spécifié, en plusieurs lignes.

Limites

  • Placez toutes les colonnes utilisées comme key en premier. Les colonnes à transposer doivent suivre.

  • N'utilisez qu'une seule UDTF dans une instruction select et n'incluez aucune autre colonne.

Format de la commande

trans_array (<num_keys>, <separator>, <key1>,<key2>,…,<col1>,<col2>,<col3>) as (<key1>,<key2>,...,<col1>, <col2>)

Paramètres

  • num_keys : Obligatoire. Constante BIGINT. La valeur doit être >=0. Ce paramètre spécifie le nombre de colonnes à utiliser comme key de transposition.

  • separator : Obligatoire. Constante STRING. Spécifie le séparateur utilisé pour diviser la chaîne en éléments. Une erreur est renvoyée si ce paramètre est vide.

  • keys : Obligatoire. Colonnes à utiliser comme key pour la transposition. Le nombre de colonnes est spécifié par num_keys. Si num_keys indique que toutes les colonnes sont utilisées comme key (c'est-à-dire que num_keys est égal au nombre total de colonnes), une seule ligne est renvoyée.

  • cols : Obligatoire. Colonnes contenant les tableaux à transposer. Toutes les colonnes qui suivent les keys sont traitées comme des tableaux pour la transposition. Ces colonnes doivent être de type STRING et contenir des tableaux au format chaîne. Par exemple, Hangzhou;Beijing;shanghai est un tableau dont les éléments sont séparés par un point-virgule (;).

Valeur de retour

La fonction renvoie les lignes transposées. Spécifiez de nouveaux noms de colonnes à l'aide de la clause as. Les types de données des colonnes key restent inchangés, tandis que toutes les autres colonnes sont converties au type STRING. Le nombre de lignes de sortie est déterminé par le tableau contenant le plus d'éléments. Les tableaux plus courts sont complétés par des valeurs NULL pour correspondre à la longueur.

Exemples

  • Exemple 1 : La table t_table contient les données suivantes.

    +----------+----------+------------+
    | login_id | login_ip | login_time |
    +----------+----------+------------+
    | wangwangA | 192.168.0.1,192.168.0.2 | 20120101010000,20120102010000 |
    | wangwangB | 192.168.45.10,192.168.67.22,192.168.6.3 | 20120111010000,20120112010000,20120223080000 |
    +----------+----------+------------+
    --Execute the SQL statement.
    select trans_array(1, ",", login_id, login_ip, login_time) as (login_id,login_ip,login_time) from t_table;
    --The following result is returned.
    +----------+----------+------------+
    | login_id | login_ip | login_time |
    +----------+----------+------------+
    | wangwangB | 192.168.45.10 | 20120111010000 |
    | wangwangB | 192.168.67.22 | 20120112010000 |
    | wangwangB | 192.168.6.3 | 20120223080000 |
    | wangwangA | 192.168.0.1 | 20120101010000 |
    | wangwangA | 192.168.0.2 | 20120102010000 |
    +----------+----------+------------+
    
    --If the table contains the following data.
    Login_id LOGIN_IP LOGIN_TIME 
    wangwangA 192.168.0.1,192.168.0.2 20120101010000
    --Shorter arrays are padded with NULL values. 
    Login_id Login_ip Login_time 
    wangwangA 192.168.0.1 20120101010000
    wangwangA 192.168.0.2 NULL
  • Exemple 2 : La table mf_fun_array_test_t contient les données suivantes.

    +------------+------------+------------+------------+
    | id         | name       | login_ip   | login_time |
    +------------+------------+------------+------------+
    | 1          | Tom        | 192.168.100.1,192.168.100.2 | 20211101010101,20211101010102 |
    | 2          | Jerry      | 192.168.100.3,192.168.100.4 | 20211101010103,20211101010104 |
    +------------+------------+------------+------------+
    
    --Use two keys, id and name, to transpose the arrays. Execute the SQL statement.
    select trans_array(2, ",", Id,Name, login_ip, login_time) as (Id,Name,login_ip,login_time) from mf_fun_array_test_t;
    --The following result is returned. The data is split and grouped by the keys, id and name.
    +------------+------------+------------+------------+
    | id         | name       | login_ip   | login_time |
    +------------+------------+------------+------------+
    | 1          | Tom        | 192.168.100.1 | 20211101010101 |
    | 1          | Tom        | 192.168.100.2 | 20211101010102 |
    | 2          | Jerry      | 192.168.100.3 | 20211101010103 |
    | 2          | Jerry      | 192.168.100.4 | 20211101010104 |
    +------------+------------+------------+------------+

Fonctions connexes

Pour plus d'informations sur les fonctions destinées à d'autres scénarios métier, consultez Autres fonctions.