Présentation des UDFs Scala¶
Vous pouvez écrire le gestionnaire d’une fonction définie par l’utilisateur (UDF) en Scala. Un gestionnaire s’exécute comme la logique de la fonction lorsqu’elle est appelée en SQL.
Snowflake prend actuellement en charge l’écriture d’UDFs Java dans les versions suivantes de Scala :
2,12
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.
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.
Note
Pour les limitations liées aux gestionnaires Scala, reportez-vous à Limites liées aux UDF Scala.
Vous pouvez également utiliser Scala pour écrire une UDF lorsque vous utilisez l’API Snowpark. Pour plus d’informations, reportez-vous à Création de fonctions définies par l’utilisateur (UDFs) pour DataFrames dans Scala.
Comment fonctionne un gestionnaire ?¶
Lorsqu’un utilisateur appelle une UDF, il transmet le nom et les arguments de l’UDF à Snowflake. Snowflake appelle la méthode de gestionnaire associée à l’UDF pour exécuter la logique de l’UDF. La méthode de gestion renvoie ensuite la sortie à Snowflake, qui la renvoie au client.
Pour une fonction scalaire (qui renvoie une seule valeur), l’UDF renvoie une seule valeur pour chaque ligne transmise à l’UDF.
Pour soutenir la logique de votre gestionnaire, votre code peut faire appel à des bibliothèques externes au gestionnaire. Par exemple, si vous disposez déjà d’un code d’analyse de données en Scala, vous pouvez probablement l’utiliser à partir de votre code de gestionnaire.
Pour des informations générales sur l’écriture d’un gestionnaire en Scala, reportez-vous à Lignes directrices générales pour le codage de gestionnaires d’UDF Scala. Pour plus d’informations sur l’écriture d’une fonction scalaire, voir Écriture d’une UDF scalaire en Scala.
Exemple¶
Le code de l’exemple suivant crée une UDF appelée echo_varchar
avec une méthode de gestionnaire TestFunc.echoVarchar
. Les types d’argument et de retour Scala sont convertis de et vers SQL par Snowflake selon les mappages décrits dans Mappages de type de données SQL-Scala.
CREATE OR REPLACE FUNCTION echo_varchar(x VARCHAR)
RETURNS VARCHAR
LANGUAGE SCALA
RUNTIME_VERSION = 2.12
HANDLER='TestFunc.echoVarchar'
AS
$$
class TestFunc {
def echoVarchar(x : String): String = {
return x
}
}
$$;
Appelez l’UDF¶
SELECT echo_varchar('Hello');
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.
Restez dans les contraintes imposées par Snowflake. Pour plus d’informations sur la conception d’un code de gestionnaire qui fonctionne bien sur Snowflake, voir Concevoir des gestionnaires qui respectent les contraintes imposées par Snowflake.
Mappage de type SQL-Scala. 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 à Mappages de type de données SQL-Scala.
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 en tant que code compilé dans une instruction JAR. Pour plus d’informations sur la différence, reportez-vous à Conserver le code du gestionnaire en ligne ou dans une zone de préparation.
Pour plus d’informations sur l’utilisation de sbt pour empaqueter le code compilé de votre gestionnaire Scala, reportez-vous à Empaquetage du code du gestionnaire Scala avec sbt.
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 à Contrôler l’état global dans des UDFs scalaires Scala.
Meilleures pratiques. Pour plus d’informations sur les meilleures pratiques, reportez-vous à Meilleures pratiques et 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 Scala.
Lignes directrices générales. Pour des informations générales sur le codage des gestionnaires, y compris la gestion des erreurs, le choix des types de données et autres, reportez-vous à Lignes directrices générales pour le codage de gestionnaires d’UDF Scala.
Écriture d’une fonction scalaire Pour plus d’informations, reportez-vous à Écriture d’une UDF scalaire en Scala.
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.
Exemples de code Pour une série d’exemples de gestionnaires, reportez-vous à Exemples de gestionnaires d’UDF Scala.
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.
Organisation des fichiers du gestionnaire. Si vous avez l’intention d’empaqueter le code compilé du gestionnaire dans un fichier JAR dans une zone de préparation, organisez et concevez votre code en utilisant les suggestions de Projet de gestionnaire et empaquetage des UDF Scala.