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
Temarray<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. Secomparator(a, b)retornar NULL, ocorrerá um erro.ImportanteAs funções de comparação no ARRAY_SORT devem ser autoconsistentes. Exemplos:
Se
compare(a, b) > 0for verdadeiro,compare(b, a) < 0também deverá ser.Se
compare(a, b) = 0for verdadeiro,compare(b, a) = 0também deverá ser.Se
compare(a, b) < 0for verdadeiro,compare(b, a) > 0també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 = 1eb = 1, a funçãocompare(a, b)retornará -1 e a funçãocompare(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 = NULLeb = 1, a funçãocompare(a, b)retornará 1 e a funçãocompare(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.