Limitations liées aux UDF Python¶
Cette rubrique décrit les limitations en vigueur pour les gestionnaires écrits en Python.
Dans ce chapitre :
Limitations générales¶
Bien que votre fonction Python puisse utiliser les modules et les fonctions des paquets Python standard, les contraintes de sécurité de Snowflake désactivent certaines fonctionnalités. Pour plus de détails, consultez la section intitulée Respecter les bonnes pratiques de sécurité.
Ăvitez le code qui suppose un systĂšme dâexploitation spĂ©cifique.
Les UDFs Python ne sont pas partageables. Les objets de la base de données qui utilisent des UDFs Python ne sont pas non plus partageables. Par exemple, vous ne pouvez pas :
Partager directement une UDF Python.
Partager une vue qui appelle une UDF Python.
Partager une fonction qui appelle une UDF Python.
Partager une table avec une politique de masquage ou dâaccĂšs aux lignes qui appelle une UDF Python.
Accorder le privilĂšge USAGE sur une UDF Python peut permettre au destinataire de voir le contenu des fichiers importĂ©s par cette UDF. Si vous accordez le privilĂšge USAGE sur une UDF Python Ă un rĂŽle, et si ce rĂŽle exĂ©cute une instruction qui appelle cette UDF Python, alors toute UDF Python dans la mĂȘme instruction pourrait lire le contenu de tout fichier importĂ© par lâUDF Python Ă laquelle vous avez accordĂ© le privilĂšge USAGE.
La rĂ©plication de la base de donnĂ©es est prise en charge pour les UDFs Python en ligne. Cependant, la rĂ©plication est bloquĂ©e si une UDF Python a une dĂ©pendance sur un fichier dans une zone de prĂ©paration (câest-Ă -dire une fonction créée Ă lâaide de la clause IMPORTS). Cette limitation pourrait ĂȘtre supprimĂ©e dans les futures versions.
Snowflake utilise le module Python
zipimport
pour importer du code Python depuis des zones de préparation. Par conséquent, toute limitationzipimport
sera également présente avec des UDFs. Pour en savoir plus surzipimport
, consultez la référence zipimport.
Limites du clonage¶
Une UDF Python peut ĂȘtre clonĂ©e lorsque la base de donnĂ©es ou le schĂ©ma contenant lâUDF Python est clonĂ©(e). Pour ĂȘtre clonĂ©e, lâUDF Python doit remplir la ou les conditions suivantes :
Si lâUDF Python fait rĂ©fĂ©rence Ă une zone de prĂ©paration, cette zone de prĂ©paration doit ĂȘtre extĂ©rieur au schĂ©ma (ou Ă la base de donnĂ©es) en cours de clonage.
Vous pouvez conserver une UDF Python et sa zone de prĂ©paration rĂ©fĂ©rencĂ©e (ou plusieurs) dans des schĂ©mas distincts (et/ou des bases de donnĂ©es distinctes) de lâune des maniĂšres suivantes :
Chaque fois que lâUDF Python fait rĂ©fĂ©rence Ă une zone de prĂ©paration, utilisez un nom de zone de prĂ©paration qualifiĂ© (par exemple, « mon_db.mon_schĂ©ma.ma_zone_prĂ©paration() ») diffĂ©rent du schĂ©ma ou de la base de donnĂ©es de lâUDF Python. Si lâopĂ©ration de clonage clone une base de donnĂ©es, la rĂ©fĂ©rence de la zone de prĂ©paration doit inclure la base de donnĂ©es et le schĂ©ma. Si lâopĂ©ration de clonage clone un schĂ©ma, la rĂ©fĂ©rence de la zone de prĂ©paration doit inclure le schĂ©ma (et Ă©ventuellement la base de donnĂ©es).
CrĂ©ez la zone de prĂ©paration rĂ©fĂ©rencĂ©e en utilisant un nom de zone de prĂ©paration non qualifiĂ© (qui utilise implicitement la base de donnĂ©es et le schĂ©ma actifs de la session actuelle), et crĂ©ez lâUDF Python en utilisant un nom qualifiĂ© qui ne correspond pas Ă la base de donnĂ©es et au schĂ©ma actuels de la session.
Utilisez la zone de prĂ©paration de lâutilisateur comme zone de prĂ©paration rĂ©fĂ©rencĂ©e (la zone de prĂ©paration de lâutilisateur est distincte de la zone de prĂ©paration de la base de donnĂ©es ou de la zone de prĂ©paration du schĂ©ma).
Si une ou plusieurs UDFs Python du schĂ©ma ou de la base de donnĂ©es ne remplissent pas les conditions requises, le schĂ©ma ou la base de donnĂ©es peut toujours ĂȘtre clonĂ©(e), mais les UDFs Python non conformes sont omises du clone sans message dâerreur ou dâavertissement.
Chaque UDF Python clonĂ©e a la mĂȘme dĂ©finition que lâoriginale. Cette dĂ©finition inclut toute rĂ©fĂ©rence aux zones de prĂ©paration. Les rĂ©fĂ©rences de zones de prĂ©paration dans lâUDF Python doivent ĂȘtre entiĂšrement qualifiĂ©es, et sont donc absolues, et non relatives au schĂ©ma ou Ă la base de donnĂ©es clonĂ©e. Parce que lâoriginale et le clone pointent tous deux vers la ou les mĂȘmes zones de prĂ©paration et le ou les mĂȘmes fichiers :
La destruction de la zone de préparation ou la suppression des fichiers requis de la zone de préparation désactive les UDF originales et clonées.
La modification de la zone de préparation ou des fichiers de la zone de préparation affecte à la fois les UDF originales et clonées.