Tous les produits
Search
Centre de documentation

MaxCompute:ARRAY_SORT

Dernière mise à jour :Aug 10, 2026

Trie les éléments du tableau ARRAY a selon le paramètre comparator.

Syntaxe

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

Paramètres

  • a : obligatoire. Tableau de type ARRAY. Le type T dans la signature array<T> représente le type de données des éléments du tableau ; ceux-ci peuvent être de n'importe quel type.

  • comparator : obligatoire. Fonction (native ou personnalisée) ou expression utilisée pour comparer deux éléments du tableau ARRAY.

    La logique de comparator(a, b) est la suivante : 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 se produit.

    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 incohérentes :

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

      Si vous définissez a = 1 et b = 1, la fonction compare(a, b) renvoie -1, tout comme la fonction compare(b, a). Les résultats de comparaison sont contradictoires, ce qui rend ces fonctions incohérentes.

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

      Si vous définissez a = NULL et b = 1, la fonction compare(a, b) renvoie 1, tout comme la fonction compare(b, a). Les résultats de comparaison sont contradictoires, ce qui rend ces fonctions incohérentes.

Valeur de retour

Renvoie une valeur de type ARRAY.

Exemples

  • Exemple 1 : trier le tableau 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 est le suivant :

    +------------+
    | _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 est le suivant :

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

Fonctions associées

  • La fonction ARRAY_SORT fait partie des fonctions de types complexes. Pour plus d'informations sur les fonctions de traitement des données de types complexes (telles que ARRAY, MAP, STRUCT et JSON), consultez la rubrique Complex type functions.

  • Les exemples de la fonction ARRAY_SORT utilisent l'opérateur ->. Pour plus d'informations sur les fonctions Lambda utilisant ->, consultez la rubrique Lambda functions.