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.
Tenarray<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. Sicomparator(a, b)devuelve null, se genera un error.ImportanteLas funciones de comparación en ARRAY_SORT deben ser autoconsistentes. Ejemplos:
Si se cumple
compare(a, b) > 0, debe cumplirsecompare(b, a) < 0.Si se cumple
compare(a, b) = 0, debe cumplirsecompare(b, a) = 0.Si se cumple
compare(a, b) < 0, debe cumplirsecompare(b, a) > 0.
Ejemplos de funciones que no son autoconsistentes:
-
(left, right) -> CASE WHEN left <= right THEN -1L ELSE 0L END:Si configura
a = 1yb = 1, la funcióncompare(a, b)devuelve -1 y la funcióncompare(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 = NULLyb = 1, la funcióncompare(a, b)devuelve 1 y la funcióncompare(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.