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éation d’une UDF ou Appel d’une UDF.

Snowflake prend actuellement en charge l’écriture d’UDFs Java dans les versions suivantes de Python :

  • 3,8

  • 3,9

  • 3,10

  • 3,11

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.8'
handler = 'addone_py'
as
$$
def addone_py(i):
  return i+1
$$;
Copy

Remarques relatives à la conception

Gardez à l’esprit les points suivants pour concevoir un gestionnaire utile.

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 à Vue d’ensemble de la journalisation et du traçage.

  • 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.