Todos os produtos
Search
Central de documentação

MaxCompute:TRANS_ARRAY

Última atualização: Sep 08, 2026

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 key devem aparecer primeiro, seguidas pelas colunas a transpor.

  • Use apenas uma UDTF por instrução select e 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 como key de 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 key para transposição. O parâmetro num_keys define a quantidade de colunas. Se num_keys indicar que todas as colunas funcionam como key (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 keys como 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_table conté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.