Tous les produits
Search
Centre de documentation

MaxCompute:ARRAY_SORT

Dernière mise à jour :Sep 17, 2026

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 T dans array<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. Si comparator(a, b) renvoie null, une erreur est générée.

    Important

    Les fonctions de comparaison utilisées dans ARRAY_SORT doivent être cohérentes. Exemples :

    • Si compare(a, b) > 0 est vérifié, alors compare(b, a) < 0 doit également l'être.

    • Si compare(a, b) = 0 est vérifié, alors compare(b, a) = 0 doit également l'être.

    • Si compare(a, b) < 0 est vérifié, alors compare(b, a) > 0 doit également l'être.

    Exemples de fonctions non cohérentes :

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

      Si vous configurez a = 1 et b = 1, la fonction compare(a, b) renvoie -1 et la fonction compare(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 = NULL et b = 1, la fonction compare(a, b) renvoie 1 et la fonction compare(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.