Limitations et modifications apportées à la bibliothèque

Cette rubrique décrit les limites et les changements de comportement des fonctions lorsqu’une fonction Streamlit fonctionne différemment dans Snowflake et dans la bibliothèque open-source.

Pour consulter les notes de version de chaque version de Streamlit, voir la Documentation Streamlit..

Limitations et modifications pour tous les runtimes

Les limitations suivantes s’appliquent à toutes les applications Streamlit in Snowflake, quel que soit le runtime :

Limitations et modifications variables selon l’environnement d’exécution

Le tableau suivant compare les limitations qui diffèrent entre les runtimes d’entrepôt et les runtimes de conteneur (prévisualisation). Pour plus d’informations sur les environnements d’exécution, voir Environnements d’exécution pour les applications Streamlit.

Limitation

Runtime d’entrepôt

Runtime de conteneur (prévisualisation)

Versions de Python

3.9, 3.10, 3.11

3.11 uniquement

Versions de Streamlit

1.22+ (sélection limitée).

1.50+ (toutes les versions, y compris les versions streamlit-nightly).

Composants v2 basés sur les paquets

Non pris en charge

Pris en charge

Affichage de grandes quantités de données

32 MB

Configurable

Chargements de fichiers

200 MB

Configurable

Mapbox et Carto

Nécessite une prise en compte des conditions des offres externes.

Non soumis aux conditions des offres externes.

Mise en cache

Mise en cache d’une seule session. Les valeurs mises en cache ne peuvent pas être partagées entre les sessions.

Entièrement prise en charge. Les valeurs mises en cache sont partagées par toutes les sessions de visualisation, à moins que vous n’utilisiez la définition de la session dans le décorateur de cache.

Paramètre ROOT_LOCATION

Pris en charge en tant que paramètre existant dans CREATE STREAMLIT.

Non pris en charge

Fenêtre de maintenance

Non applicable

Selon la Snowpark Container Services fenêtre de maintenance.

Service de fichiers statiques

Non pris en charge

Pris en charge

Détails de la limitation

Fonctions Streamlit non prises en charge

Les fonctionnalités Streamlit suivantes ne sont pas entièrement prises en charge dans Streamlit in Snowflake :

  • st.set_page_config :

    Les propriétés page_title, page_icon et menu_items de la commande st.set_page_config ne sont pas prises en charge.

  • Fichier config.toml :

    Pour un résumé des options de configuration prises en charge et non prises en charge, voir Configuration de Streamlit.

Chargement des ressources externes

Toutes les applications Streamlit in Snowflake s’exécutent dans la politique de sécurité du contenu (CSP) qui restreint les ressources qui peuvent être chargées. La CSP bloque le chargement de code à partir de domaines externes et l’intégration de contenu externe dans des iframes. Elle bloque également les appels frontaux qui sont généralement considérés comme dangereux, tels que eval(). Pour plus d’informations sur CSP, voir Politique de sécurité du contenu.

Par exemple, le code suivant s’exécute sans erreur Python, mais le script n’est pas chargé ni exécuté dans le navigateur :

# This won't work
st.html(
   "<script src="http://www.example.com/example.js"></script>",
   unsafe_allow_javascript=True
)
Copy

Note

Les développeurs d’applications sont responsables des contrôles de sécurité et de la chaîne d’approvisionnement du code de l’application Streamlit in Snowflake conformément au modèle de responsabilité partagée de Snowflake.

Composants personnalisés

En raison de la CSP, les composants personnalisés ne peuvent pas charger de scripts à partir de domaines externes dans les runtimes des entrepôts et des conteneurs. Étant donné que les composants basés sur des paquets utilisent un répertoire d’actifs pour servir leur contenu statique, les différences suivantes s’appliquent :

  • Dans les runtimes d’entrepôt, les composants v2 basés sur des paquets qui utilisent un répertoire d’actifs ne sont pas pris en charge.

  • Dans les runtimes de conteneurs, les composants v2 basés sur des paquets sont entièrement pris en charge.

Pour utiliser un composant personnalisé v2 dans un runtime d’entrepôt, il doit être défini avec des HTML, CSS, et JavaScript en ligne.

Note

Les composants importés à partir d’une source tierce sont soumis à la licence attachée à ce composant. Vous devez veiller à ce que votre utilisation d’un composant soit autorisée par sa licence.

Snowflake ne crée pas et ne gère pas les composants tiers que vous pourriez importer dans Streamlit in Snowflake. L’utilisation de ces composants se fait sous votre entière responsabilité et n’est pas soumise à des garanties, des accords de niveau de service ou d’autres garanties similaires de Snowflake.

Paramètres de requête

Pour st.query_params dans Streamlit in Snowflake, un préfixe streamlit- est ajouté à chaque clé de paramètre de requête dans l’URL. Ce préfixe n’est pas inclus lorsque vous utilisez st.query_params pour obtenir ou définir une valeur.

Prenons l’URL suivante :

https://app.snowflake.com/org/account_name/#/streamlit-apps/DB.SCHEMA.APP_NAME?streamlit-first_key=one&streamlit-second_key=two

Les paramètres de cette URL sont accessibles dans st.query_params comme les paires clé-valeur suivantes :

{
   "first_key" : "one",
   "second_key" : "two"
}
Copy

Affichage de grandes quantités de données

Les applications Streamlit exécutées dans les runtimes d’entrepôt sont contraints à une limite de taille de 32 MB pour les messages échangés entre le backend et le frontend. Si vous essayez d’afficher plus de 32 MB de données avec une seule commande Streamlit, comme st.dataframe, l’erreur suivante se produit :

MessageSizeError: Data Size exceeds message limit

Pour éviter cette limite, concevez votre application Streamlit de manière à afficher les données par incréments inférieurs à 32 MB. Il n’existe pas de limite explicite à la taille d’une requête que vous pouvez exécuter ou à la quantité de données que vous pouvez avoir en mémoire.

Dans les runtimes des conteneurs, cette limite est définie par défaut sur 200 MB et peut être modifiée en définissant l’option de configuration Streamlit, server.maxMessageSize. Cependant, la taille des messages ne peut pas dépasser la capacité de la mémoire du conteneur. Autoriser des messages plus volumineux pourrait dépasser la limite de mémoire du conteneur, en particulier si des lecteurs simultanés sont présents.

Chargements de fichiers

La limite de taille de fichier par défaut pour st.file_uploader et st.chat_input est de 200 MB. Dans les runtimes des entrepôts, cette valeur n’est pas configurable. Dans les runtimes des conteneurs, cette limite peut être modifiée en définissant l’option de configuration Streamlit, server.maxUploadSize. Cependant, la taille du fichier ne peut pas dépasser la capacité de la mémoire du conteneur. Autoriser des fichiers plus volumineux pourrait dépasser la limite de mémoire du conteneur, en particulier si des lecteurs simultanés sont présents.

Pour les fichiers plus volumineux, envisagez de traiter les données par lots de plus petite taille ou d’utiliser d’autres méthodes de chargement.

Mapbox et Carto

Mapbox et Carto fournissent des vignettes cartographiques lorsque vous utilisez les commandes st.map ou st.pydeck_chart Streamlit.

Dans les runtimes d’entrepôt, qui gèrent leurs paquets avec conda, Mapbox et Carto sont des applications tierces qui sont soumises aux Conditions des offres externes de Snowflake.

Pour utiliser ces commandes dans les runtimes d’entrepôt, vous devez accepter les conditions des offres externes. Les runtimes de conteneur ne nécessitent pas cette acceptation.

Mise en cache

La mise en cache est partiellement prise en charge dans les runtimes des entrepôts et entièrement prise en charge dans les runtimes des conteneurs.

Dans les runtimes d’entrepôt, la mise en cache est limitée à la mise en cache d’une seule session. Les valeurs mises en cache ne peuvent pas être partagées entre les sessions. Dans les runtimes de conteneurs, la mise en cache est entièrement prise en charge. Les valeurs mises en cache sont partagées entre toutes les sessions de lecteur.