Dépanner les erreurs de Snowflake Notebooks¶
Les scénarios suivants peuvent vous aider à résoudre les problèmes qui peuvent survenir lors de l’utilisation de Snowflake Notebooks.
Le nombre total de notebooks dépasse la limite de l”Snowsight¶
L’erreur suivante se produit lorsque le nombre total de notebooks dans votre compte dépasse 6 000 et que vous actualisez la liste Notebooks :
Les utilisateurs peuvent toujours créer de nouveaux notebooks ; cependant, Snowflake vous recommande de supprimer les notebooks qui ne sont plus utilisés par le compte.
Erreur Notebooks (Warehouse Runtime) lors de la mise à jour d’un paquet¶
Snowflake a rendu obsolète le paquet snowflake-ml plus ancien, qui n’est plus pris en charge. Il a été retiré du sélecteur de paquets et n’est pas disponible sur le canal Anaconda Snowflake. Si vous utilisez snowflake-ml et si vous tentez d’ajouter, de retirer ou de mettre à jour des paquets dans vos notebooks, ces notebooks échoueront, car snowflake-ml n’est plus accessible.
Pour éviter les problèmes, passez à snowflake-ml-python, qui est le paquet correct pour Snowflake ML.
Erreur Plotly¶
Plotly passera à webgl s’il y a plus de 1 000 points de données.
AttributeError : NoneType¶
L’erreur suivante se produit lorsqu’une cellule est renommée à l’aide du même nom que celui d’une variable existante dans le notebook :
Par exemple, vous avez ce qui suit dans une cellule Python appelée cell1 :
Si vous renommez ensuite cell2 en lui donnant le nom « session » et si vous référencez « session » dans cell3, Notebooks tente de référencer « session » (le nom de la cellule) et non la session Snowpark, ce qui provoque une erreur.
Déconnexion précoce¶
La session de notebook s’exécute sous forme de procédure stockée. Le délai d’expiration est de 30 minutes dans Warehouse Runtime et de 60 minutes dans Container Runtime. Si votre notebook se déconnecte inopinément avant le délai d’expiration, il se peut que votre ACCOUNTADMIN ou le propriétaire de l’entrepôt ait fixé le paramètre STATEMENT_TIMEOUT_IN_SECONDS à une valeur particulière (par exemple, 5 minutes), ce qui limite la durée d’exécution de toutes les instructions sur l’entrepôt, y compris les sessions de notebook. Ce paramètre est défini au niveau de l’entrepôt ou du compte, et lorsqu’il est défini à la fois pour un entrepôt et une session, la valeur non nulle la plus basse est appliquée.
Pour permettre au notebook de fonctionner plus longtemps, vous pouvez utiliser l’entrepôt par défaut SYSTEM$STREAMLIT_NOTEBOOK$WAREHOUSE ou régler le paramètre STATEMENT_TIMEOUT_IN_SECONDS sur une durée supérieure.
Pour plus de détails sur le paramètre du temps d’inactivité, voir Temps d’inactivité et reconnexion.
Échec de la reconnexion¶
Si les cookies ne sont pas activés dans votre navigateur, vous ne pouvez pas vous reconnecter automatiquement à la session du notebook alors qu’elle devrait encore être active (avant d’être interrompue pour cause d’inactivité). Lorsque vous rouvrez le notebook, un message d’erreur s’affiche :
Le redémarrage de la session met fin à la requête EXECUTE NOTEBOOK en cours et démarre une nouvelle session. La clôture de la session met fin à la requête en cours sur le site EXECUTE NOTEBOOK.
Si vous ne prenez aucune de ces actions, la requête EXECUTE NOTEBOOK en cours continuera à s’exécuter sur l’entrepôt, comme le montre l’illustration suivante : Query History.
Impossible de se connecter en raison d’un pare-feu¶
La fenêtre suivante apparaît lorsque vous essayez de démarrer votre notebook :
Ensure that *.snowflake.app and *.snowflake.com are on the allowlist in your network (including content filtering systems), and
can connect to Snowflake. For Streamlit apps using container runtimes, also add *.snowflakecomputing.app to the allowlist.
When these domains are on the allowlist, your apps can communicate with Snowflake servers without any restrictions.
However, in some cases adding these domains may not be sufficient due to network policies blocking subpaths under them. If this occurs,
contact your network administrator.
De plus, pour éviter tout problème de connexion au backend Snowflake, assurez-vous que les WebSockets ne sont pas bloqués dans votre configuration réseau.
Paquets manquants¶
Le message suivant apparaît dans une sortie de cellule si vous essayez d’utiliser un paquet qui n’est pas installé dans l’environnement de votre notebook :
Importez le paquet nécessaire en suivant les instructions à la page Importer des paquets Python pour les utiliser dans les notebooks.
Paquet manquant dans un notebook existant¶
De nouvelles versions des notebooks sont continuellement publiées et les notebooks sont automatiquement mis à niveau vers la dernière version. Parfois, lors de la mise à niveau d’un ancien notebook, les paquets de l’environnement du notebook ne sont pas compatibles avec la mise à niveau. Cela peut entraîner l’échec du démarrage du notebook.
Voici un exemple de message d’erreur lorsque le paquet Libpython est manquant :
Pour résoudre cette erreur, procédez comme suit :
Actualisez la page Web et recommencez le notebook.
Si le problème persiste, ouvrez le sélecteur de paquets et vérifiez que tous les paquets installés sont valides. Dans le menu déroulant de chaque paquet, vous pouvez voir les versions disponibles. La sélection de la dernière version du paquet fait généralement disparaître l’erreur.
Notebook manquant¶
Les notebooks sont des objets de niveau schéma, ce qui signifie qu’ils sont stockés dans un schéma spécifique d’une base de données. Si un schéma est détruit (supprimé), tous les objets qu’il contient (y compris les notebooks) sont également détruits. Si vous ne voyez pas un notebook qui existait auparavant, il est possible que le schéma auquel il appartenait ait été supprimé. Dans ce cas, le notebook est définitivement supprimé et ne peut pas être récupéré.
Pour éviter la perte accidentelle de notebooks :
Vérifiez les objets contenus dans un schéma avant de le détruire.
Limitez les privilèges de destruction de schémas pour éviter les suppressions accidentelles ou non autorisées.
Envisagez d’exporter le contenu du notebook dans des scripts contrôlés par version en dehors du notebook.
Si votre notebook est absent et que le schéma existe toujours, assurez-vous que votre rôle actuel dispose des privilèges nécessaires pour voir le schéma et ses objets.
Problème de système de fichiers en lecture seule¶
Certaines bibliothèques Python téléchargent ou mettent en cache des données dans un répertoire utilisateur local. Cependant, le répertoire utilisateur par défaut /home/udf est en lecture seule. Pour contourner ce problème, définissez le chemin sur /tmp, qui est un emplacement accessible en écriture. Notez que la variable d’environnement utilisée pour définir le répertoire d’écriture peut varier en fonction de la bibliothèque que vous utilisez. Vous trouverez ci-dessous une liste des bibliothèques connues qui présentent ce problème :
matplotlib
HuggingFace
catboost
exemple matplotlib¶
Vous pouvez voir cet avertissement lorsque vous utilisez matplotlib :
Résolvez cet avertissement à l’aide du code suivant, qui donne à la variable MPLCONFIGDIR la valeur /tmp/ :
Exemple Huggingface¶
Il se peut que vous voyiez cet avertissement lorsque vous utilisez Huggingface :
Le code suivant définit les variables HF_HOME et SENTENCE_TRANSFORMERS_HOME à /tmp/ pour se départir de cette erreur :
Le message de sortie est trop volumineux lorsque vous utilisez df.collect()¶
Le message suivant s’affiche dans la sortie de la cellule lorsque vous exécutez df.collect() :
Les Snowflake Notebooks tronquent automatiquement les résultats dans la sortie de la cellule pour les grands ensembles de données dans les cas suivants :
Tous les résultats de la cellule SQL.
Résultats de la cellule Python s’il s’agit d’un
snowpark.Dataframe.
Le problème avec la cellule ci-dessus est que df.collect() renvoie une List au lieu d’un snowpark.Dataframe. Les listes ne sont pas automatiquement tronquées. Pour contourner ce problème, envoyez directement les résultats du DataFrame.
Le notebook plante lors de l’utilisation de df.to_pandas() sur des DataFrames Snowpark¶
Lors de l’exécution de df.to_pandas(), toutes les données sont chargées en mémoire et peuvent entraîner la fin de la session du notebook si la taille des données dépasse la limite de mémoire de l’entrepôt de notebook associé.
Exemple 1 : Exporter une table Snowpark vers un DataFrame Pandas¶
Solution pour l’exemple 1¶
L’exemple suivant montre comment vous pouvez réécrire le code pour lire la table avec Pandas Snowpark.
Exemple 2 : Référencer une cellule SQL contenant de grands résultats¶
Si vous avez le code suivant dans une cellule SQL appelée cell1, le résultat de la sortie est 500 M de lignes.
Ensuite, lorsque vous récupérez les résultats dans un DataFrame Pandas, le notebook se bloque car les données sont trop volumineuses pour tenir dans la mémoire :
En général, pour les grands ensembles de données, Snowflake recommande d’éviter d’utiliser df.to_pandas(). Au lieu de cela, pour opérer sur vos données avec Pandas, utilisez l’API Pandas Snowpark et un entrepôt optimisé pour Snowpark. L’API Pandas Snowpark vous permet d’exécuter votre code Pandas directement sur vos données dans Snowflake avec la requête effectuée dans SQL. Cela vous permet d’exécuter du code Pandas sur des données qui ne tiennent pas dans la mémoire du notebook.
Solution pour l’exemple 2¶
Dans le deuxième exemple de référencement de cellule ci-dessus, vous pouvez d’abord convertir le résultat de votre cellule SQL en une cellule DataFrame Snowpark. Vous pouvez ensuite les convertir dans Pandas Snowpark.
Pour plus de détails, voir pandas on Snowflake dans les notebooks.
Impossible de se connecter en raison du fractionnement de tunnel VPN¶
Si votre VPN est configuré pour utiliser le fractionnement de tunnel, vous devez ajouter *.snowflake.com et *.snowflake.app à la liste d’autorisations de votre politique réseau.
Erreur le notebook n’existe pas¶
Le message suivant s’affiche dans la sortie de la cellule lorsque vous essayez d’exécuter un notebook dont le nom contient des caractères spéciaux :
Les noms des notebooks sont des identificateurs Snowflake. Tout nom de notebook comportant des caractères spéciaux tels que des points et des espaces doit être placé entre guillemets doubles pour respecter les règles d’identificateur.
Conflit de versions des paquets¶
Si vous exécutez un notebook non interactif qui charge une version de paquet à partir de l’image de base et que vous tentez ensuite d’installer une nouvelle version, celle-ci ne sera pas chargée. Assurez-vous que la version du paquet correspond à l’image de base. Dans le cas d’un notebook interactif, vous serez invité à redémarrer le notebook pour utiliser la nouvelle version.
L’exécution du notebook SPCS planifié échoue¶
Avant d’exécuter un notebook planifié dans Container Runtime, vous devez créer un référentiel d’images. En l’absence d’un référentiel d’images, l’erreur suivante s’affiche :
Pour plus d’informations sur la création d’un référentiel d’images, voir CREATE IMAGE REPOSITORY.
Les messages connectés n’apparaissent pas dans la sortie¶
Si les messages du journal n’apparaissent pas dans la sortie du notebook, assurez-vous que les journaux sont dirigés vers stdout. Voici un exemple de configuration correcte de la connexion :
Pour mettre en évidence les erreurs, vous pouvez les envoyer à stderr en utilisant une approche similaire. Par ailleurs, si vous travaillez avec Streamlit dans Snowflake Notebooks, vous pouvez utiliser ses fonctions intégrées pour un formatage plus clair :
Impossible d’exécuter le notebook¶
Lorsque vous créez un notebook à l’aide de CREATE NOTEBOOK, celui-ci ne dispose pas automatiquement d’une version en direct dans la zone de préparation des versions. Si vous tentez d’exécuter un notebook à l’aide de EXECUTE NOTEBOOK sans avoir d’abord paramétré une version en direct, ou si vous créez un notebook et qu’il est abandonné, l’erreur suivante se produit :
Pour résoudre cette erreur, utilisez la commande suivante afin de définir la version en direct initiale :