用途
本技能引导用户将 TPC-H 交互式仪表盘(FastAPI + Chart.js)以及 Locust 负载测试部署到 Snowpark Container Services(SPCS)。仅在用户明确要求部署、更新或管理 TPC-H 仪表盘时使用。
前置条件
- 已安装 uv(Python 包运行器)
- 已在 ~/.snowflake/connections.toml 中配置 Snowflake 连接
- 拥有创建计算池和服务权限的角色(例如 SYSADMIN 或 ACCOUNTADMIN)
- 已安装 Docker
- 已设置好 TPC-H 表(需先运行 interactive-tpch-benchmark 技能的 setup)
工作流程
步骤 1:检测意图
询问用户想要执行的操作:
- 部署仪表盘 — 将 FastAPI 仪表盘 + Locust 负载测试部署到 SPCS
- 检查状态 — 显示 SPCS 服务状态和入口 URL
- 更新 — 在不更改 URL 的情况下重新构建并重新部署
- 拆除 — 移除 SPCS 服务和计算池
然后路由到对应部分。
部署仪表盘到 SPCS
目标:将 FastAPI + Chart.js 仪表盘和 Locust 负载测试部署到 Snowpark Container Services。
操作:
- 确保 tpc-h-sample-dashboard/ 中存在 .env:
cp tpc-h-sample-dashboard/.env.example tpc-h-sample-dashboard/.env
- 向用户询问:
- CONNECTION_NAME — Snowflake 连接
- SOLUTION_NAME — 与 TPC-H 设置时使用的相同(默认:IW_TPCH)
- DEFAULT_SCALE — 仪表盘查询的规模
-
用这些值更新 tpc-h-sample-dashboard/.env。
-
确保 tpc-h-sample-dashboard/spcs/config.env 存在(若缺失则从模板创建):
cp tpc-h-sample-dashboard/spcs/config.env.template tpc-h-sample-dashboard/spcs/config.env
然后检查关键设置:
- CONNECTION — 用于 SPCS 部署的 Snowflake 连接
- ROLE — 用于创建 SPCS 对象的角色(默认:ACCOUNTADMIN)
- DEPLOY_WAREHOUSE — 部署 SQL 会话使用的仓库
- SOLUTION_NAME — 必须与 tpc-h-sample-dashboard/.env 中的值一致
- DEFAULT_SCALE — 必须与 tpc-h-sample-dashboard/.env 中的规模一致
- 创建反规范化仪表盘表:
cd <REPO_ROOT>/tpc-h-sample-dashboard/spcs && ./deploy.sh sql
- 部署 SPCS 服务(构建 Docker 镜像、推送、创建计算池和服务):
cd <REPO_ROOT>/tpc-h-sample-dashboard/spcs && ./deploy.sh services
部署的服务:
- DASHBOARD — 浏览器 UI + API(dashboard 计算池)
- DASHBOARD_API_LOCUST — 用于负载测试的隔离 API 副本(locust 计算池)
- DASHBOARD_LOCUST — Locust 负载生成器(locust 计算池)
部署后:脚本会打印入口 URL。在浏览器中打开仪表盘 URL(首次访问会提示 Snowflake 登录)。
检查状态
cd <REPO_ROOT>/tpc-h-sample-dashboard/spcs && ./status.sh
选项:
- ./status.sh --wait — 轮询直到所有服务就绪
- ./status.sh --urls-only — 仅打印入口 URL
更新仪表盘(重新构建但不更改 URL)
cd <REPO_ROOT>/tpc-h-sample-dashboard/spcs && ./update.sh
拆除
SPCS 服务(删除服务、计算池、镜像仓库):
cd <REPO_ROOT>/tpc-h-sample-dashboard/spcs && ./teardown.sh
停止点
- 检测意图后 — 在继续前确认操作
- 收集配置值后 — 在运行 setup 前确认 .env 内容
- 运行 deploy.sh services 前 — 警告这会构建 Docker 镜像并创建计算池(有成本影响)
- 拆除前 — 确认要删除哪些资源
故障排除
| 问题 | 解决方案 |
|---|---|
| uv: command not found | 安装 uv:curl -LsSf https://astral.sh/uv/install.sh | sh |
| Docker 构建失败 | 确保 Docker 守护进程正在运行;检查 docker info |
| 服务卡在 PENDING | 运行 ./logs.sh 检查容器日志 |
| 服务 FAILED | 检查 ./logs.sh;常见原因是缺少授权或网络规则 |
| 连接错误 | 验证连接名称存在于 ~/.snowflake/connections.toml |
输出
运行中的 SPCS 服务,提供仪表盘和 Locust UI 的公共入口 URL。