关于 Streamlit in Snowflake¶
注意
此功能适用于 AWS、Microsoft Azure 和 GCP 区域 的账户。不支持 AWS PrivateLink 和 Azure 专用链接。
本主题介绍如何使用 Streamlit in Snowflake 开发和运行 Streamlit 应用程序。
关于 Streamlit in Snowflake¶
` Streamlit <https://streamlit.io/ (https://streamlit.io/)>`_ 是一个开源 Python 库,可以轻松创建和共享用于机器学习和数据科学的自定义 Web 应用程序。通过使用 Streamlit,可以快速构建和部署强大的数据应用程序。有关此开源库的更多信息,请参阅 ` Streamlit 库文档 <https://docs.streamlit.io/ (https://docs.streamlit.io/)>`_。
借助 Streamlit in Snowflake,开发者可以在 Snowflake 的数据云上安全地构建、部署和共享 Streamlit 应用程序。通过使用 Streamlit in Snowflake,可以构建能处理和使用 Snowflake 中数据的应用程序,而无需将数据或应用程序代码移到外部系统中。
使用 Streamlit in Snowflake 的先决条件¶
要使用 Streamlit in Snowflake,请确保满足了以下先决条件:
查看 某些限制和不支持的功能。
查看 :ref:` 创建和使用 Streamlit 应用程序所需的权限 <label-streamlit_access_requirements>`。
确认外部产品条款。要在 Streamlit in Snowflake 中使用 Mapbox 以及 Anaconda 提供的包,您必须确认 外部产品条款。有关使用这些包的信息,请参阅 使用来自 Anaconda 的第三方包。
确保
*.snowflake.app
位于网络的允许列表中,并且应用程序能够连接到 Snowflake。有关更多信息,请参阅 您不能加载 Streamlit 应用程序。
创建和使用 Streamlit 应用程序所需的权限¶
在 Streamlit in Snowflake 内,Streamlit 应用程序是一个安全对象,它遵循 Snowflake 访问控制框架。Streamlit 应用程序使用基于所有者权限的权限模型。有关详细信息,请参阅 了解所有者的权限和 Streamlit in Snowflake 应用程序。
应用程序编辑者和包含 Streamlit 应用程序的架构的所有者可以确定哪些角色有权使用该应用程序。用户可以与应用程序进行交互,并且可以看到 Streamlit 应用程序显示的任何内容。用户看到的应用程序视图与所有者相同。
有关更多信息,请参阅 共享 Streamlit 应用程序。
创建 Streamlit 应用程序所需的权限¶
Streamlit 应用程序是架构级对象。
要使用 Streamlit in Snowflake 创建和编辑 Streamlit 应用程序,您必须使用对架构拥有 OWNERSHIP 权限或同时拥有以下两种权限的角色:
在包含 Streamlit 应用程序的数据库上授予:
USAGE
在包含 Streamlit 应用程序的架构上授予:
USAGE
CREATE STREAMLIT
CREATE STAGE
使用 GRANT <privileges> 命令将这些权限授予角色,如以下示例所示:
GRANT USAGE ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_creator; GRANT USAGE ON DATABASE streamlit_db TO ROLE streamlit_creator; GRANT CREATE STREAMLIT ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_creator; GRANT CREATE STAGE ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_creator;
如果在数据库或架构上定义了未来授权,请确保用户使用未来授权中定义的角色创建 Streamlit 应用程序。
查看 Streamlit 应用程序所需的权限¶
要查看 Streamlit 应用程序,必须拥有 Snowflake 账户并已登录。此外,您必须使用被授予以下各项的 USAGE 权限的角色:
包含 Streamlit 应用程序的数据库。
包含 Streamlit 应用程序的架构。
Streamlit 应用程序。
在大多数情况下,当应用程序所有者与其他角色共享 Streamlit 应用程序时, USAGE 权限将自动授予新角色。但是,如果在 MANAGED ACCESS 架构中创建 Streamlit 应用程序,则必须手动将 USAGE 权限授予新角色。
架构所有者或具有 MANAGE GRANTS 权限的角色的用户必须使用 GRANT <privileges> 命令授予 USAGE 权限,如以下示例所示:
GRANT USAGE ON DATABASE streamlit_db TO ROLE streamlit_user;
GRANT USAGE ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_user;
GRANT USAGE on STREAMLIT streamlit_db.streamlit_schema.streamlit_app to ROLE streamlit_user;
备注
STREAMLIT 对象不支持:ref:未来授予<label-granting_future_privs_on_schema_objects>。
受支持的 Streamlit 库版本¶
Streamlit in Snowflake 支持 Streamlit 库的 v1.22.0 和 v1.26.0 版本。后续将包含对 Streamlit 库新版本的支持。
要查看每个版本的版本说明,请参阅 ` Streamlit 库更改日志 <https://docs.streamlit.io/library/changelog (https://docs.streamlit.io/library/changelog)>`_。请注意,Streamlit in Snowflake 中不支持开源 Streamlit 库的某些功能。请参阅 不支持的 Streamlit 功能。
选择 Streamlit 库版本¶
对于每个 Streamlit in Snowflake 应用程序,您可以在 Snowsight 中选择 Streamlit 库版本,也可以将版本固定在应用程序的 environment.yml
文件中。如果没有固定版本,则使用最新的可用版本。
Snowflake 建议固定 Streamlit 的某个版本,以防止在 Snowflake Anaconda 通道发布新版本的 Streamlit 时升级应用程序。
在 Snowsight 的 Streamlit 应用程序中选择 Streamlit 版本¶
要在 Snowsight 内选择 Streamlit 应用程序中要使用的版本,请执行以下操作:
以具有 CREATE STREAMLIT 权限的用户身份登录 Snowsight。
在导航菜单中,选择 Projects » Streamlit。
选择 Streamlit 应用程序。
选择 Edit。
在 Streamlit 编辑器的顶部,选择 Packages。
选择 Streamlit 版本。
在 environment.yml
文件中固定 Streamlit 版本¶
要在 environment.yml
文件中固定 Streamlit 版本,请使用下面的示例:
name: sf_env
channels:
- snowflake
dependencies:
- scikit-learn
- streamlit=1.26.0
支持的外部包¶
默认情况下,Streamlit in Snowflake 包含预先安装到环境中的 python
、streamlit
和 snowflake-snowpark-python
包。环境还可以访问这些包所需的依赖项。
Streamlit in Snowflake 应用程序在 Python 3.8 中运行。
可以在 Streamlit 应用程序中安装其他包。请参阅 ` Snowflake Anaconda 通道 <https://repo.anaconda.com/pkgs/snowflake/ (https://repo.anaconda.com/pkgs/snowflake/)>`_,了解受支持的包列表。
有关在 Streamlilt 应用程序中包含支持的包的信息,请参阅以下主题:
Streamlit in Snowflake 的并发性注意事项¶
Streamlit in Snowflake 在 Snowflake 内提供会话限流和自动扩缩容功能,以处理对 Streamlit 应用程序的需求增加的时段。Streamlit in Snowflake 使用云服务实例和虚拟仓库实例的组合。有关更多信息,请参阅 关键概念和架构。
为了保持 Snowflake 的完整性, Streamlit in Snowflake 对云服务实例可以处理的并发 Streamlit 会话数量施加了每个实例、每个账户和每个用户的限制。Streamlit 会话在这些实例之间进行负载平衡,直至所有实例都达到其并发会话限制。当达到限制时,实例会自动扩缩容,以支持更多会话。
备注
Streamlit 应用程序用户的请求可能会暂时受到限流。启动自动扩缩容后,用户可能会看到“Please Wait”消息。
Streamlit in Snowflake 的计费注意事项¶
Streamlit in Snowflake 需要 虚拟仓库 才能运行 Streamlit 应用程序和执行 SQL 查询。要运行 Streamlit 应用程序,必须选择一个虚拟仓库来运行应用程序本身及其查询。在应用程序的 WebSocket 连接处于活动状态时,该仓库保持活跃状态。此 WebSocket 连接使 Streamlit 应用程序的虚拟仓库保持活跃状态,它会在应用程序上次用完大约 15 分钟后过期。
为了节省 Credit,可以暂停虚拟仓库。或者,可以关闭运行该应用程序的网页,这样正在运行的虚拟仓库就可以自动暂停。
在 Streamlit in Snowflake 中选择仓库的准则¶
在 Streamlit in Snowflake 内运行 Streamlit 应用程序时,多种因素可能会影响性能,包括 Streamlit 应用程序的复杂性、仓库的可用性、延迟和成本等。以下部分提供了在 Streamlit in Snowflake 内使用虚拟仓库的一般准则。
使用较小的仓库¶
在 Streamlit in Snowflake 内运行 Streamlit 应用程序时,应选择尽可能最小的仓库。
运行时,仓库会维护 Streamlit 应用程序使用的 Python 包的缓存。缓存 Python 包后,稍后加载应用程序时会使用包的缓存版本而不是重新下载包,因而相应提高了性能。 仓库暂停时会移除缓存,这可能会导致仓库恢复后应用程序的加载速度最初会变慢。随着已恢复的仓库运行更多应用程序,包缓存会被重建,因此,能够利用缓存的应用程序的加载性能会逐渐提升。
请注意,每秒 Credit 计费和自动暂停提供了灵活性,即开始时使用较小的仓库,然后按照 Streamlit 应用程序的工作负载来调整仓库的大小。可以随时增加仓库的大小。有关更多信息,请参阅 更改 Streamlit 应用程序的仓库。
使用专用仓库¶
使用 Streamlit in Snowflake 时,Snowflake 建议使用专用仓库来运行 Streamlit 应用程序。这使您可以隔离 Streamlit 应用程序的运行成本。专用仓库还可以缩短应用程序的加载时间,原因是仓库不必管理其他工作负载。
有关更多信息,请参阅 仓库注意事项。
小技巧
为避免仓库在初始化过程中暂停,可考虑将自动暂停至少设置为 30 秒。
使用单独的仓库运行查询¶
Streamlit 应用程序使用虚拟仓库来运行应用程序及其查询。更高级的应用程序和用例可能需要运行复杂的查询,而这需要更大的仓库。
Streamlit in Snowflake 支持 USE WAREHOUSE 命令,该命令可为会话制定当前仓库。这样,您就可以使用 X-小仓库运行应用程序,并使用较大的仓库处理复杂查询。
您可以在 Streamlit 应用程序中使用单独的仓库来运行查询,方法如下:
import streamlit as st
from snowflake.snowpark.context import get_active_session
# Get the current credentials
session = get_active_session()
warehouse_sql = f"USE WAREHOUSE LARGE_WH"
session.sql(warehouse_sql).collect()
# Execute the SQL using a different warehouse
sql = """SELECT * from MY_DB.INFORMATION_SCHEMA.PACKAGES limit 100"""
session.sql(sql).collect()
备注
仓库仅在查询期间使用。
为 Streamlit 应用程序自定义睡眠计时器¶
您可以为 Streamlit 应用程序设置自定义睡眠计时器,以使其自动暂停。要设置自定义睡眠定时器,请在 .streamlit
文件夹内创建 config.toml
配置文件,此文件夹的路径由 STREAMLIT 对象的 ROOT_LOCATION
参数指定。
例如,如果希望 Streamlit 应用程序在 8 分钟后自动暂停,请在 config.toml
文件中添加以下内容:
[snowflake]
[snowflake.sleep]
streamlitSleepTimeoutMinutes = 8
将 config.toml
文件上传到暂存区位置,如下例所示:
PUT file:///<path_to_your_root_folder>/my_app/config.toml @streamlit_db.streamlit_schema.streamlit_stage/.streamlit/ overwrite=true auto_compress=false;
有关使用 Streamlit 文件的更多信息,请参阅 使用 SQL 创建 Streamlit 应用程序。
备注
您可以将 streamlitSleepTimeoutMinutes
设置为介于 5 至 240 分钟之间的任意值。
如果未创建配置文件来指定计时器,默认自动暂停时间为 15 分钟。