Trie les éléments du tableau a à l'aide d'un comparateur.
Syntaxe
array<T> array_sort(array<T> <a>, function<T, T, bigint> <comparator>)
Paramètres
a : obligatoire. Ce paramètre spécifie un tableau. Le type
Tdansarray<T>indique le type de données des éléments du tableau. Les éléments peuvent être de n'importe quel type de données.-
comparateur : obligatoire. Ce paramètre spécifie une fonction intégrée, une fonction définie par l'utilisateur (UDF) ou une expression utilisée pour comparer deux éléments du tableau.
Logique de traitement de
comparator(a, b): si a est égal à b, la fonction renvoie 0. Si a est inférieur à b, elle renvoie un entier négatif. Si a est supérieur à b, elle renvoie un entier positif. Sicomparator(a, b)renvoie null, une erreur est générée.ImportantLes fonctions de comparaison utilisées dans ARRAY_SORT doivent être cohérentes. Exemples :
Si
compare(a, b) > 0est vérifié, alorscompare(b, a) < 0doit également l'être.Si
compare(a, b) = 0est vérifié, alorscompare(b, a) = 0doit également l'être.Si
compare(a, b) < 0est vérifié, alorscompare(b, a) > 0doit également l'être.
Exemples de fonctions non cohérentes :
-
(left, right) -> CASE WHEN left <= right THEN -1L ELSE 0L END:Si vous configurez
a = 1etb = 1, la fonctioncompare(a, b)renvoie -1 et la fonctioncompare(b, a)renvoie également -1. Les résultats de comparaison sont contradictoires, ce qui signifie que les fonctions ne sont pas cohérentes. -
(left, right) -> CASE WHEN left < right THEN - 1L WHEN left = right THEN 0L ELSE 1L END:Si vous configurez
a = NULLetb = 1, la fonctioncompare(a, b)renvoie 1 et la fonctioncompare(b, a)renvoie également 1. Les résultats de comparaison sont contradictoires, ce qui signifie que les fonctions ne sont pas cohérentes.
Valeur de retour
La fonction renvoie une valeur de type ARRAY.
Exemples
-
Exemple 1 : trier les éléments 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 );Le résultat suivant est renvoyé :
+------------+ | _c0 | +------------+ | [1,5,6] | +------------+ -
Exemple 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);Le résultat suivant est renvoyé :
+------+ | _c0 | +------+ | [{a:1, b:10}, {a:2, b:12}, {a:3, b:11}] | +------+
Fonctions associées
ARRAY_SORT est une fonction de type complexe. Pour plus d'informations sur les fonctions utilisées pour traiter les données de types complexes, tels que ARRAY, MAP, STRUCT et JSON, consultez la rubrique Fonctions de type complexe.
Dans les exemples précédents, la combinaison d'un trait d'union et d'un chevron fermant
(->)est utilisée. Pour en savoir plus sur l'utilisation de cette combinaison(->)dans les fonctions Lambda, consultez la rubrique Fonctions Lambda.