Todos os produtos
Search
Central de documentação

MaxCompute:ARRAY_SORT

Última atualização: Sep 17, 2026

Ordena os elementos do array a com base em um comparator.

Sintaxe

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

Parâmetros

  • a: obrigatório. Especifica um array. T em array<T> define o tipo de dados dos elementos do array, que podem ser de qualquer tipo.

  • comparator: obrigatório. Especifica uma função interna, uma função definida pelo usuário (UDF) ou uma expressão para comparar dois elementos do array.

    Lógica de processamento de comparator(a, b): retorna 0 se a for igual a b; um inteiro negativo se a for menor que b; e 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:

      Ao definir a = 1 e b = 1, a função compare(a, b) retorna -1, e compare(b, a) também retorna -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:

      Ao definir a = NULL e b = 1, a função compare(a, b) retorna 1, e compare(b, a) também retorna 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 os elementos em 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 obter mais informações sobre funções que processam dados de tipos complexos, como ARRAY, MAP, STRUCT e JSON, consulte Complex type functions.

  • Os exemplos anteriores utilizam a combinação de hífen com sinal de maior que (->). Para saber mais sobre o uso dessa combinação (->) em funções Lambda, consulte Lambda functions.