Esta função de tabela com valor definido pelo usuário (UDTF) transpõe uma única linha em várias linhas. Ela converte um array, armazenado em uma coluna como string com um separador específico, em múltiplas linhas.
Limites
Todas as colunas usadas como
keydevem aparecer primeiro, seguidas pelas colunas a transpor.Use apenas uma UDTF por instrução
selecte não inclua outras colunas.
Formato do comando
trans_array (<num_keys>, <separator>, <key1>,<key2>,…,<col1>,<col2>,<col3>) as (<key1>,<key2>,...,<col1>, <col2>)
Parâmetros
num_keys: Obrigatório. Constante BIGINT. O valor deve ser
>=0. Define o número de colunas a usar comokeyde transposição.separator: Obrigatório. Constante STRING. Especifica o separador para dividir a string em elementos. O sistema retorna erro se este parâmetro estiver vazio.
keys: Obrigatório. Colunas a usar como
keypara transposição. O parâmetro num_keys define a quantidade de colunas. Se num_keys indicar que todas as colunas funcionam comokey(ou seja, num_keys igual ao total de colunas), a função retorna apenas uma linha.cols: Obrigatório. Colunas que contêm os arrays a transpor. O sistema trata todas as colunas após as
keyscomo arrays para transposição. Essas colunas devem ser do tipo STRING e conter arrays em formato de string. Por exemplo,Hangzhou;Beijing;shanghaié um array cujos elementos são separados por ponto e vírgula (;).
Valor de retorno
A função retorna as linhas transpostas. Defina novos nomes de colunas com a cláusula as. Os tipos de dados das colunas key permanecem inalterados, enquanto as demais colunas são convertidas para o tipo STRING. O array com mais elementos determina o número de linhas de saída. Arrays menores recebem preenchimento com valores NULL para igualar o comprimento.
Exemplos
-
Exemplo 1: A tabela
t_tablecontém os seguintes dados.+----------+----------+------------+ | 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 -
Exemplo 2: A tabela mf_fun_array_test_t contém os seguintes dados.
+------------+------------+------------+------------+ | 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 | +------------+------------+------------+------------+
Funções relacionadas
Para obter mais informações sobre funções para outros cenários de negócios, consulte Other functions.