Les fonctions définies par l'utilisateur (UDF) SQL permettent d'encapsuler une logique métier réutilisable directement en SQL, sans écrire de code Java ou Python. Contrairement aux UDF Java/Python, les UDF SQL acceptent des paramètres de type fonction, y compris des fonctions anonymes. L'instruction CREATE SQL FUNCTION crée une UDF SQL permanente stockée dans le système de métadonnées MaxCompute.
Pour créer une UDF SQL temporaire non persistée dans le système de métadonnées, utilisez plutôt l'instruction FUNCTION
Prérequis
Avant de commencer, vérifiez que vous disposez des éléments suivants :
Des autorisations au niveau de la fonction sur votre compte Alibaba Cloud (création, requête, appel et suppression). Pour plus d'informations, consultez la page Autorisations MaxCompute
Le mode script SQL activé dans votre éditeur. L'exécution de
CREATE SQL FUNCTIONen mode d'édition SQL standard génère une erreur. Pour plus d'informations, consultez la page SQL en mode script
Syntaxe
create sql function <function_name>(@<parameter_in1> <datatype>[, @<parameter_in2> <datatype>...])
[returns @<parameter_out> <datatype>]
as [begin]
<function_expression>
[end];
Pour une UDF constituée d'une seule expression, omettez les mots-clés begin et end et saisissez l'expression directement après as. Pour une logique comportant plusieurs instructions, encadrez-les avec begin...end.
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
|
Oui |
Nom de l'UDF SQL. Il doit être unique au sein du projet et ne pas correspondre au nom d'une fonction intégrée. Chaque nom de fonction unique ne peut être enregistré qu'une seule fois. Pour vérifier les noms de fonction existants, exécutez LIST FUNCTIONS. |
|
|
Oui |
Paramètres d'entrée. Ils peuvent être de type fonction, y compris des fonctions anonymes. Pour des exemples, consultez la section paramètres d'entrée de type fonction. Pour des exemples de fonctions anonymes, consultez la section paramètres d'entrée de fonction anonyme. |
|
|
Oui |
Type de données de chaque paramètre d'entrée. Il doit s'agir d'un type pris en charge par MaxCompute. Consultez la page Édition des types de données MaxCompute V2.0. Lors de l'appel de l'UDF, les types de données d'entrée doivent correspondre exactement à ceux définis ici. |
|
|
Non |
Variable de valeur de retour. Si ce paramètre est omis, la valeur de |
|
|
Oui (si |
Nom du paramètre de sortie pour la valeur de retour. |
|
|
Oui |
Logique d'implémentation de l'UDF. Elle peut utiliser un opérateur intégré, une fonction intégrée ou une autre UDF. |
Exemples
UDF simple
Pour une logique constituée d'une seule expression, saisissez l'expression directement après as :
-- Increment a BIGINT value by 1
create sql function my_add(@a BIGINT) as @a + 1;
L'expression suivant as constitue le corps de la fonction. Elle peut faire référence à des opérateurs intégrés, des fonctions intégrées ou d'autres UDF.
UDF multi-instructions
Pour une logique nécessitant des variables intermédiaires, utilisez begin...end pour encadrer plusieurs instructions :
-- Sum three BIGINT values using an intermediate variable
create sql function my_sum(@a BIGINT, @b BIGINT, @c BIGINT) returns @my_sum BIGINT
as begin
@temp := @a + @b;
@my_sum := @temp + @c;
end;
La clause returns @my_sum BIGINT nomme explicitement la variable de retour. Si vous omettez returns, la fonction renvoie par défaut la valeur de function_name.
Paramètres d'entrée de type fonction
Les UDF SQL acceptent des paramètres de type fonction, ce qui permet de transmettre des fonctions intégrées ou d'autres UDF en tant qu'arguments. Pour des exemples détaillés, consultez les sections suivantes :
Étapes suivantes
Après avoir créé une UDF SQL, utilisez les instructions suivantes pour la gérer et l'appeler :
|
Instruction |
Description |
|
Appelle une UDF SQL. |
|
|
Affiche les détails de l'UDF : nom, propriétaire, heure de création, nom de classe et liste des ressources. |
|
|
Répertorie toutes les UDF d'un projet MaxCompute. |
|
|
Supprime une UDF existante d'un projet MaxCompute. |
|
|
Crée une UDF SQL temporaire (non persistée dans le système de métadonnées). |