Todos los productos
Search
Centro de documentos

MaxCompute:ARRAY_SORT

Última actualización: Sep 17, 2026

Ordena los elementos del arreglo a con base en un comparator.

Sintaxis

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

Parámetros

  • a: obligatorio. Este parámetro especifica un arreglo. T en array<T> indica el tipo de dato de los elementos del arreglo. Los elementos admiten cualquier tipo de dato.

  • comparator: obligatorio. Este parámetro especifica una función integrada, una función definida por el usuario (UDF) o una expresión que se utiliza para comparar dos elementos del arreglo.

    Lógica de procesamiento de comparator(a, b): si a es igual a b, devuelve 0; si a es menor que b, devuelve un entero negativo; si a es mayor que b, devuelve un entero positivo. Si comparator(a, b) devuelve null, se genera un error.

    Importante

    Las funciones de comparación en ARRAY_SORT deben ser autoconsistentes. Ejemplos:

    • Si se cumple compare(a, b) > 0, debe cumplirse compare(b, a) < 0.

    • Si se cumple compare(a, b) = 0, debe cumplirse compare(b, a) = 0.

    • Si se cumple compare(a, b) < 0, debe cumplirse compare(b, a) > 0.

    Ejemplos de funciones que no son autoconsistentes:

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

      Si configura a = 1 y b = 1, la función compare(a, b) devuelve -1 y la función compare(b, a) también devuelve -1. Los resultados de la comparación entran en conflicto entre sí, por lo que las funciones no son autoconsistentes.

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

      Si configura a = NULL y b = 1, la función compare(a, b) devuelve 1 y la función compare(b, a) también devuelve 1. Los resultados de la comparación entran en conflicto entre sí, por lo que las funciones no son autoconsistentes.

Valor devuelto

Devuelve un valor de tipo ARRAY.

Ejemplos

  • Ejemplo 1: ordene los elementos de 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
                     );

    Se devuelve el siguiente resultado:

    +------------+
    | _c0        |
    +------------+
    | [1,5,6]    |
    +------------+
  • Ejemplo 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);

    Se devuelve el siguiente resultado:

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

Funciones relacionadas

  • ARRAY_SORT es una función de tipo complejo. Para obtener más información sobre las funciones que procesan datos de tipos complejos, como ARRAY, MAP, STRUCT y JSON, consulte Complex type functions.

  • En los ejemplos anteriores se utilizó la combinación de un guion y un signo de mayor que (->). Para obtener más información sobre cómo usar esta combinación (->) en funciones Lambda, consulte Lambda functions.