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Ă©er une fonction dĂ©finie par lâutilisateur ou ExĂ©cutez 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 Ă Journalisation, traçage et mĂ©triques.
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.