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 limitation zipimport sera Ă©galement prĂ©sente avec des UDFs. Pour en savoir plus sur zipimport, 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.