使用 SQL 创建和部署 Streamlit 应用程序¶
本主题介绍如何使用 SQL 命令在 Snowflake 中部署 Streamlit 应用程序。从本地开发环境开始,您可以将 Streamlit 应用程序文件复制到 Snowflake 的命名暂存区,并基于这些文件创建 Streamlit 对象。
使用 SQL 创建 Streamlit 应用程序¶
在使用 SQL 创建 Streamlit 应用程序之前,请确保您满足必要的 先决条件。
要使用 SQL 命令在 Snowflake 中创建 Streamlit 应用程序,请执行以下每个任务:
可选:在本地文件系统上创建 Streamlit 文件¶
本部分介绍如何创建一组本地应用程序源文件,并将它们暂存到 Snowflake 中。在下一部分中,如果在创建 STREAMLIT 对象时没有暂存源文件,则会将一组默认源文件复制到您的 STREAMLIT 对象中。
在本地文件系统上, ` 创建 Streamlit 主应用程序 <https://docs.streamlit.io/library/get-started/create-an-app (https://docs.streamlit.io/library/get-started/create-an-app)>`_。
可选:要配置部署环境并指定依赖项,请创建一个
environment.yml文件。如果未包含此文件,应用程序将在 Streamlit in Snowflake 中使用最新受支持的 Python 和 Streamlit 版本运行。有关应用程序依赖项的信息,请参阅 使用 environment.yml 文件来管理包。
创建 Streamlit 应用程序后,目录结构应类似如下:
project_directory/
├── .streamlit/
│ └── config.toml
├── environment.yml
└── streamlit_app.py
备注
Streamlit in Snowflake 支持多页面 Streamlit 应用程序。此示例仅展示单页面应用程序,但您可以添加 pages/ 目录或使用 st.navigation 创建多页面应用程序。要了解多页面应用程序,请参阅 Streamlit 开源文档中的 多页面应用程序概述 (https://docs.streamlit.io/develop/concepts/multipage-apps/overview)。
将 Streamlit 文件上传到命名暂存区¶
要在 Streamlit in Snowflake 内创建 Streamlit 应用程序,必须将应用程序文件上传至命名暂存区。
要上传应用程序文件,请执行以下操作之一:
使用 Snowsight 上传应用程序文件,如 使用 Snowsight 暂存文件 中所述。
使用 SnowSQL 上传应用程序文件,如下例所示:
PUT file:///<path_to_your_project_directory>/streamlit/streamlit_app.py @streamlit_db.streamlit_schema.streamlit_stage overwrite=true auto_compress=false; PUT file:///<path_to_your_project_directory>/streamlit/environment.yml @streamlit_db.streamlit_schema.streamlit_stage overwrite=true auto_compress=false; PUT file:///<path_to_your_project_directory>/streamlit/.streamlit/config.toml @streamlit_db.streamlit_schema.streamlit_stage/.streamlit/ overwrite=true auto_compress=false;
创建 STREAMLIT 对象¶
STREAMLIT 对象是 Snowflake 中的数据库对象,它封装了 Streamlit 应用程序所需的文件。
要创建 STREAMLIT 对象,请运行 CREATE STREAMLIT 命令,如下例所示:
CREATE STREAMLIT hello_streamlit FROM '@streamlit_db.streamlit_schema.streamlit_stage' MAIN_FILE = 'streamlit_app.py' QUERY_WAREHOUSE = my_warehouse;
此命令根据在 FROM 和 MAIN_FILE 中指定的路径和文件,创建一个名为
hello_streamlit的 STREAMLIT 对象。备注
虽然 QUERY_WAREHOUSE 子句是可选的,但必须指定查询仓库才能在 Snowflake 中运行 Streamlit 应用程序。
可选:要验证是否已创建 Streamlit 对象,请运行 SHOW STREAMLITS 命令:
SHOW STREAMLITS;
要完成应用程序初始化,所有者角色必须在 Snowsight 中查看应用程序,或运行以下命令:
ALTER STREAMLIT hello_streamlit ADD LIVE VERSION FROM LAST;
使用 environment.yml 文件来管理包¶
要在 Streamlit 应用程序中安装其他 Python 包,请执行以下步骤:
在本地文件系统上创建
environment.yml文件。要将该文件上传到 STREAMLIT 对象的
ROOT_LOCATION参数指定的暂存区位置,请运行 PUT 命令。environment.yml中列出的包通过 ` Snowflake Anaconda 通道 <https://repo.anaconda.com/pkgs/snowflake/ (https://repo.anaconda.com/pkgs/snowflake/)>`_ 安装。
以下示例 environment.yml 演示了如何在 Streamlit 环境中安装 scikit-learn:
name: sf_env
channels:
- snowflake
dependencies:
- scikit-learn
name 和 channels 属性是必需的。此外,channels 属性下需要有 - snowflake 键。
备注
只能安装 ` Snowflake Anaconda 通道 <https://repo.anaconda.com/pkgs/snowflake/ (https://repo.anaconda.com/pkgs/snowflake/)>`_ 中列出的包。Snowflake 中的 Streamlit 不支持外部 Anaconda 频道。
在 environment.yml 文件中固定 Streamlit 版本¶
要在
environment.yml文件中固定 Streamlit 版本,请包含一个streamlit依赖项,如下例所示:name: sf_env channels: - snowflake dependencies: - scikit-learn - streamlit=1.31.1
查看 Streamlit 应用程序¶
要查看有关 STREAMLIT 对象的信息,请运行 DESCRIBE STREAMLIT 命令,如下例所示:
DESC STREAMLIT hello_streamlit;
要在 Snowsight 中查看 Streamlit 应用程序,请参阅 查看 Streamlit 应用程序。
管理 STREAMLIT 对象¶
创建 STREAMLIT 对象后,可使用 ALTER STREAMLIT 命令来修改不同的属性,如以下部分所述。
重命名 STREAMLIT 对象¶
要重命名 STREAMLIT 对象,请使用 ALTER STREAMLIT 命令的 RENAME TO 子句,如下例所示:
ALTER STREAMLIT hello_streamlit RENAME TO hello_snowflake;
更改 STREAMLIT 对象中的暂存区或主文件¶
要更改 STREAMLIT 对象的暂存区的路径,请使用 ALTER STREAMLIT 命令来设置该对象的 ROOT_LOCATION 属性,如下例所示:
ALTER STREAMLIT hello_streamlit SET ROOT_LOCATION = '@snowflake_db.snowflake_schema.snowflake_stage'
要更改 STREAMLIT 对象中的 Streamlit 主文件,请使用 ALTER STREAMLIT 命令来设置该对象的 MAIN_FILE 属性,如下例所示:
ALTER STREAMLIT hello_streamlit SET MAIN_FILE = 'snowflake_main.py'
更改分配给 STREAMLIT 对象的查询仓库¶
要为 STREAMLIT 对象添加查询仓库或更改当前查询仓库,请使用 ALTER STREAMLIT 命令来设置对象的 QUERY_WAREHOUSE 属性,如下例所示:
ALTER STREAMLIT hello_streamlit SET QUERY_WAREHOUSE = my_new_warehouse;
列出可用的 STREAMLIT 对象¶
要列出当前角色可用的 Streamlit 应用程序,请运行 SHOW STREAMLITS 命令,如下例所示:
SHOW STREAMLITS;
删除 STREAMLIT 对象¶
要删除 STREAMLIT 对象,请运行 DROP STREAMLIT 命令,如下例所示:
DROP STREAMLIT hello_streamlit;