Todos os produtos
Search
Central de documentação

MaxCompute:ARRAY_SORT

Última atualização: Jun 26, 2026

Ordena os elementos do array a com base no comparator.

Formato do comando

array<T> array_sort(array<T> <a>, function<T, T, bigint> <comparator>)

Descrição dos parâmetros

  • a: obrigatório. Array. O T em array<T> indica o tipo de dados dos elementos, que podem ser de qualquer tipo.

  • comparator: obrigatório. Função (nativa ou definida pelo usuário) ou expressão usada para comparar dois elementos do array.

    A lógica de processamento de comparator(a, b) é: retorna 0 se a for igual a b; retorna um inteiro negativo se a for menor que b; retorna um inteiro positivo se a for maior que b. Se comparator(a, b) retornar NULL, ocorrerá um erro.

    Importante

    As funções de comparação no ARRAY_SORT devem ser autoconsistentes. Exemplos:

    • Se compare(a, b) > 0 for verdadeiro, compare(b, a) < 0 também deverá ser.

    • Se compare(a, b) = 0 for verdadeiro, compare(b, a) = 0 também deverá ser.

    • Se compare(a, b) < 0 for verdadeiro, compare(b, a) > 0 também deverá ser.

    Exemplos de funções não autoconsistentes:

    • (left, right) -> CASE WHEN left <= right THEN -1L ELSE 0L END:

      Se você definir a = 1 e b = 1, a função compare(a, b) retornará -1 e a função compare(b, a) também retornará -1. Os resultados da comparação entram em conflito, indicando que a função não é autoconsistente.

    • (left, right) -> CASE WHEN left < right THEN - 1L WHEN left = right THEN 0L ELSE 1L END:

      Se você definir a = NULL e b = 1, a função compare(a, b) retornará 1 e a função compare(b, a) também retornará 1. Os resultados da comparação entram em conflito, indicando que a função não é autoconsistente.

Valor de retorno

Retorna um valor do tipo ARRAY.

Exemplos

  • Exemplo 1: ordenar o array array(5,6,1).

    SELECT array_sort(array(5,6,1),(left,right)->
                      CASE 
                       WHEN left<right THEN-1L 
                       WHEN left>right THEN 1L 
                       ELSE 0L 
                      END
                     );

    Resultado:

    +------------+
    | _c0        |
    +------------+
    | [1,5,6]    |
    +------------+
  • Exemplo 2:

    SELECT array_sort(a, (a,b)-> 
                      CASE 
                       WHEN a.a>b.a THEN 1L 
                       WHEN a.a<b.a THEN -1L 
                       ELSE 0L 
                      END)
     FROM VALUES (
      ARRAY(named_struct('a', 1, 'b', 10),
            named_struct('a', 3, 'b', 11),
            named_struct('a', 2, 'b', 12)))
      AS t(a);

    Resultado:

    +------+
    | _c0 |
    +------+
    | [{a:1, b:10}, {a:2, b:12}, {a:3, b:11}] |
    +------+

Funções relacionadas

  • ARRAY_SORT é uma função de tipo complexo. Para outras funções de processamento de tipos complexos (como ARRAY, MAP, STRUCT e JSON), consulte Complex type functions.

  • Os exemplos de ARRAY_SORT usam o operador ->. Para mais informações sobre o uso de -> em funções Lambda, consulte Lambda functions.