Nouvelles fonctions : ARRAY_SORT, ARRAY_MIN et ARRAY_MAX peuvent entrer en conflit avec des UDFs nommées de la même manière

Attention

Ce changement de comportement est présent dans le bundle 2023_05.

Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.

Dans la version actuelle, Snowflake introduit de nouvelles fonctions intégrées avec les noms suivants et les signatures suivants :

  • ARRAY_SORT renvoie les éléments du tableau ARRAY d’entrée dans l’ordre trié. Cette fonction a les signatures suivantes :

    • ARRAY_SORT(input_array)

      Trie les éléments par ordre croissant, les NULLs étant placés à la fin du tableau.

    • ARRAY_SORT(input_array, sort_ascending)

      Trie les éléments dans l’ordre croissant si sort_ascending est TRUE ou dans l’ordre décroissant si sort_ascending est FALSE.

      Les NULLs sont triés en dernier si sort_ascending est TRUE ou en premier si sort_ascending est FALSE.

    • ARRAY_SORT(input_array, sort_ascending, nulls_first)

      Trie les éléments dans l’ordre croissant si sort_ascending est TRUE ou dans l’ordre décroissant si sort_ascending est FALSE.

      Les NULLs sont triés en premier si nulls_first est TRUE ou en dernier si nulls_first est FALSE.

    Il n’est pas garanti que cette fonction fournisse un tri stable lors de la comparaison de valeurs de deux types numériques ou d’horodatage différents (ou d’objets contenant ces types).

  • ARRAY_MIN renvoie l’élément défini minimum dans le tableau d’entrée

  • ARRAY_MAX renvoie l’élément défini maximal dans le tableau d’entrée

Si vous avez des UDFs nommées ARRAY_SORT, ARRAY_MIN ou ARRAY_MAX avec les mêmes signatures, ce changement de comportement a l’effet suivant :

Précédemment:

Les appels à ARRAY_SORT, ARRAY_MIN ou ARRAY_MAX sont résolus par vos UDFs.

Actuellement:

Les appels à ARRAY_SORT, ARRAY_MIN ou ARRAY_MAX seront résolus par les nouvelles fonctions intégrées.

Les fonctions intégrées peuvent fonctionner différemment de vos UDFs.

Si la sémantique documentée des nouvelles fonctions intégrées ne correspond pas à la sémantique de vos UDFs, vous pouvez soit :

  • Renommer vos UDFs (en utilisant ALTER FUNCTION … RENAME TO …) et remplacer toutes les références au nom de l’UDF d’origine par le nouveau nom.

  • Qualifier complètement toutes les références à vos UDFs en spécifiant les noms de la base de données et du schéma contenant les UDFs. Par exemple :

    SELECT my_database.my_schema.array_sort(...);
    
    Copy

Réf : 1135