Introduction aux UDFs Python¶
Vous pouvez Ă©crire le gestionnaire dâune fonction dĂ©finie par lâutilisateur (UDF) en Python. Les rubriques de cette section dĂ©crivent comment concevoir et Ă©crire un gestionnaire Python. Vous trouverez Ă©galement des exemples.
Pour une introduction aux UDFs, y compris une liste de langages dans lesquels vous pouvez Ă©crire un gestionnaire dâUDF, reportez-vous Ă Vue dâensemble des fonctions dĂ©finies par lâutilisateur.
Une fois que vous avez un gestionnaire, vous crĂ©ez lâUDF avec SQL. Pour plus dâinformations sur lâutilisation de SQL pour crĂ©er ou appeler une UDF, reportez-vous Ă CrĂ©er une fonction dĂ©finie par lâutilisateur ou ExĂ©cutez une UDF.
Snowflake prend actuellement en charge lâĂ©criture dâUDFs Java dans les versions suivantes de Python :
3,9
3,10
3,11
3,12
Note
Pour les limitations liées aux gestionnaires UDF Python, reportez-vous à Limitations liées aux UDF Python.
Dans ce chapitre :
Fonctionnement dâun gestionnaire Python¶
Lorsquâun utilisateur appelle une UDF, il transmet le nom et les arguments de lâUDF Ă Snowflake. Snowflake appelle le code du gestionnaire associĂ© (avec des arguments, le cas Ă©chĂ©ant) pour exĂ©cuter la logique de lâUDF. La mĂ©thode de gestion renvoie ensuite la sortie Ă Snowflake, qui la renvoie au client.
Pour chaque ligne transmise Ă une UDF, lâUDF renvoie soit une valeur scalaire (câest-Ă -dire unique), soit, si elle est dĂ©finie comme une fonction de table, un ensemble de lignes.
Les UDFs Python peuvent contenir Ă la fois du nouveau code et des appels vers des paquets existants, ce qui vous offre Ă la fois flexibilitĂ© et rĂ©utilisation du code. Par exemple, si vous disposez dĂ©jĂ dâun code dâanalyse de donnĂ©es en Python, vous pouvez probablement lâintĂ©grer dans un gestionnaire dâUDF Python.
Exemple¶
Le code de lâexemple suivant crĂ©e une UDF appelĂ©e addone
avec une méthode de gestionnaire addone_py
. Les types dâargument et de retour Python sont convertis de et vers SQL par Snowflake selon les mappages dĂ©crits dans Mappages des types de donnĂ©es SQL-Python.
CREATE OR REPLACE FUNCTION addone(i INT)
RETURNS INT
LANGUAGE PYTHON
RUNTIME_VERSION = '3.9'
HANDLER = 'addone_py'
AS $$
def addone_py(i):
return i+1
$$;
Remarques relatives à la conception¶
Gardez Ă lâesprit les points suivants pour concevoir un gestionnaire utile.
Considérations générales. Pour les considérations communes aux UDFs et aux procédures, reportez-vous à Directives et contraintes de conception pour les fonctions et les procédures.
Mappage de type Python SQL. Lors de lâĂ©change dâarguments et de valeurs de retour avec une UDF, Snowflake fait la conversion entre le langage du gestionnaire et SQL. Pour plus dâinformations sur le choix des types de donnĂ©es pour votre code de gestionnaire, reportez-vous Ă Choisir vos types de donnĂ©es.
Code empaquetĂ©. Vous pouvez rendre le code de votre gestionnaire disponible soit en ligne avec lâinstruction CREATE FUNCTION, soit sur une zone de prĂ©paration. Pour plus dâinformations sur la diffĂ©rence, reportez-vous Ă Conserver le code du gestionnaire en ligne ou dans une zone de prĂ©paration.
Optimisation de code. Pour plus dâinformations sur lâoptimisation du code de votre gestionnaire, par exemple lorsque le code gĂšre des Ă©tats partagĂ©s entre plusieurs lignes, reportez-vous Ă Optimisation de lâinitialisation et contrĂŽle de lâĂ©tat global dans des UDFs scalaires et Optimisation de lâĂ©chelle et des performances.
Meilleures pratiques. Pour plus dâinformations sur les meilleures pratiques, voir Pratiques de sĂ©curitĂ© pour UDFs et procĂ©dures.
Codage du gestionnaire¶
Des principes de base Ă des exemples dĂ©taillĂ©s, les rubriques suivantes dĂ©crivent comment Ă©crire un gestionnaire dâUDF en Python.
DĂ©finition de module Java. Vous Ă©crivez la logique dâune UDF dans un module Python. Pour en savoir plus sur la maniĂšre dont Snowflake interagit avec votre code, reportez-vous Ă Conception du module.
Traitement des erreurs. Pour plus dâinformations sur la façon dont Snowflake traite les erreurs gĂ©nĂ©rĂ©es par les gestionnaires, reportez-vous Ă Gestion des erreurs.
Valeurs de retour tabulaires. Vous pouvez renvoyer des valeurs tabulaires ainsi que des valeurs scalaires (individuelles) Ă partir dâune UDF. Pour plus dâinformations sur la maniĂšre dâĂ©crire un gestionnaire qui renvoie des valeurs tabulaires, reportez-vous Ă Ăcriture dâune UDTF en Python.
Journalisation et traçage dâĂ©vĂ©nements. Pour plus dâinformations sur la capture des donnĂ©es de journal et de trace lors de lâexĂ©cution du code de votre gestionnaire, reportez-vous Ă Journalisation, traçage et mĂ©triques.
DĂ©pendances. Vous pouvez mettre des dĂ©pendances Ă la disposition de votre code au moment de lâexĂ©cution en les chargeant dans une zone de prĂ©paration. Pour plus dâinformations, reportez-vous Ă Mettre les dĂ©pendances Ă la disposition de votre code.
Exemples de code Pour une sĂ©rie dâexemples de gestionnaires en Python, reportez-vous Ă Exemples de gestionnaires dâUDF Python.