Todos los productos
Search
Centro de documentos

MaxCompute:TRANS_ARRAY

Última actualización: Sep 08, 2026

Esta función definida por el usuario con valores de tabla (UDTF) transpone una sola fila en varias filas. Convierte un arreglo, almacenado en una columna como cadena con un separador específico, en varias filas.

Límites

  • Todas las columnas que se utilicen como key deben colocarse primero. Las columnas que se van a transponer deben ir después.

  • Solo se permite usar una UDTF en una instrucción select, y no se pueden incluir otras columnas.

Formato del comando

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

Parámetros

  • num_keys: obligatorio. Constante de tipo BIGINT. El valor debe ser >=0. Este parámetro especifica la cantidad de columnas que se usan como key para la transposición.

  • separator: obligatorio. Constante de tipo STRING. Especifica el separador que se utiliza para dividir la cadena en elementos. Si este parámetro está vacío, se devuelve un error.

  • keys: obligatorio. Columnas que se usan como key para la transposición. La cantidad de columnas se define con num_keys. Si num_keys indica que todas las columnas funcionan como key (es decir, num_keys es igual al número total de columnas), solo se devuelve una fila.

  • cols: obligatorio. Columnas que contienen los arreglos por transponer. Todas las columnas posteriores a keys se tratan como arreglos para la transposición. Estas columnas deben ser de tipo STRING y contener arreglos en formato de cadena. Por ejemplo, Hangzhou;Beijing;shanghai es un arreglo cuyos elementos están separados por punto y coma (;).

Valor de retorno

La función devuelve las filas transpuestas. Puede especificar nuevos nombres de columna mediante la cláusula as. Los tipos de datos de las columnas key permanecen sin cambios, mientras que el resto de las columnas se convierte al tipo STRING. La cantidad de filas de salida depende del arreglo con más elementos. Los arreglos más cortos se rellenan con valores NULL para igualar esa longitud.

Ejemplos

  • Ejemplo 1: la tabla t_table contiene a continuación los siguientes datos.

    +----------+----------+------------+
    | 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
  • Ejemplo 2: la tabla mf_fun_array_test_t contiene a continuación los siguientes datos.

    +------------+------------+------------+------------+
    | 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 |
    +------------+------------+------------+------------+

Funciones relacionadas

Para obtener más información sobre funciones para otros escenarios de negocio, consulte Other functions.