Tous les produits
Search
Centre de documentation

MaxCompute:TRANS_ARRAY

Dernière mise à jour :Aug 21, 2026

UDTF qui transforme une ligne de données en plusieurs lignes en convertissant les tableaux stockés dans des colonnes (séparés par un délimiteur fixe) en lignes distinctes.

Limites d'utilisation

  • Placez toutes les colonnes servant de key en premier, et les colonnes à transposer à la fin.

  • Une instruction select ne peut contenir qu'une seule UDTF ; aucune autre colonne n'est autorisée.

Syntaxe

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

Paramètres

  • num_keys : Obligatoire. Constante de type BIGINT dont la valeur doit être >=0. Indique le nombre de colonnes servant de key lors de la transposition en plusieurs lignes.

  • separator : Obligatoire. Constante de type STRING représentant le délimiteur utilisé pour scinder la chaîne en plusieurs éléments. Une erreur est renvoyée si cette valeur est vide.

  • keys : Obligatoire. Colonnes servant de key lors de la transposition ; leur nombre est défini par num_keys. Si num_keys spécifie que toutes les colonnes servent de key (c'est-à-dire que num_keys est égal au nombre total de colonnes), une seule ligne est renvoyée.

  • cols : Obligatoire. Tableaux à convertir en lignes. Toutes les colonnes situées après keys sont considérées comme les tableaux à transposer. Elles doivent être de type STRING et contenir des chaînes formatées en tableau, par exemple Hangzhou;Beijing;shanghai, qui constitue un tableau délimité par des points-virgules (;).

Valeurs de retour

Renvoie les lignes transposées, dont les nouveaux noms de colonnes sont spécifiés par as. Le type des colonnes servant de key reste inchangé, tandis que toutes les autres colonnes sont de type STRING. Le nombre de lignes générées correspond à celui du tableau le plus long ; les valeurs manquantes sont complétées par NULL.

Exemples

  • Exemple 1 : Supposons que la table t_table contienne 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 |
    +----------+----------+------------+
    --执行SQL。
    select trans_array(1, ",", login_id, login_ip, login_time) as (login_id,login_ip,login_time) from t_table;
    --返回结果如下。
    +----------+----------+------------+
    | 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 |
    +----------+----------+------------+
    
    --如果表中的数据如下所示。
    Login_id LOGIN_IP LOGIN_TIME 
    wangwangA 192.168.0.1,192.168.0.2 20120101010000
    --会对数组中不足的数据补NULL。 
    Login_id Login_ip Login_time 
    wangwangA 192.168.0.1 20120101010000
    wangwangA 192.168.0.2 NULL
  • Exemple 2 : Supposons que la table mf_fun_array_test_t contienne 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 |
    +------------+------------+------------+------------+
    
    --用两个key,id和name进行转数组,执行SQL。
    select trans_array(2, ",", Id,Name, login_ip, login_time) as (Id,Name,login_ip,login_time) from mf_fun_array_test_t;
    --返回结果如下,已经对key,id和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 associées

La fonction TRANS_ARRAY appartient à la catégorie des autres fonctions. Pour plus d'informations sur les fonctions dédiées à d'autres scénarios métier, consultez Autres fonctions.