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
keyen premier. Les colonnes à transposer doivent suivre.N'utilisez qu'une seule UDTF dans une instruction
selectet 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 commekeyde 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
keypour la transposition. Le nombre de colonnes est spécifié par num_keys. Si num_keys indique que toutes les colonnes sont utilisées commekey(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
keyssont 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;shanghaiest 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_tablecontient 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.