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
keydeben 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 comokeypara 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
keypara la transposición. La cantidad de columnas se define con num_keys. Si num_keys indica que todas las columnas funcionan comokey(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
keysse 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;shanghaies 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_tablecontiene 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.