用途:snowman 用于查询 Snowflake、发现对象、剖析数据、检验转换假设、排查数据质量,以及暂存用户请求的 SQL 变更供手动执行。
主要能力与用法:所有 SQL 查询都经包装器执行,命令为 python3 <skill-dir>/scripts/snowman.py "<SQL>",每次调用提交一条语句。包装器会追加 DESCRIBE RESULT 获取列类型,并应用所选上下文中的 default_warehouse。stdout 只输出 CSV 数据,加 --json 时输出紧凑 JSON 数组;类型、截断提示和产物路径输出到 stderr,解析时应保持两条流分离。可通过 --max-rows、--max-cell、--max-output 调整默认限制(默认 50 行、每单元格 200 字符、16000 字节),设为 0 解除对应限制;JSON 会保留嵌套对象与数组,除非被截断。任何被截断的结果都会以 JSON 保存完整行与模式,可依据 stderr 中 # full result: 路径在本地查看。
上下文与配置:会从当前目录向上查找并加载 .snowman/context.md;若不存在则先执行引导流程。查询需要上下文,只有带 --connection <name> 的引导发现可例外。上下文记录项目架构和连接名,绝不记录凭据,应纳入版本控制。数据库范围只是关注提示,不是访问限制。多环境项目用 environments 映射,默认使用 default_env,可用 --env <name> 选择单次查询环境;单账户上下文使用 connection,拒绝 --env。
变更暂存:用户要求 DML 或 DDL 时,用 python3 <skill-dir>/scripts/snowman.py --stage "<SQL>" --name <purpose-slug> 暂存,暂存需上下文,可接受多条语句,名称用 kebab-case。包装器在 .snowman/staged/ 下写一个被 gitignore 的文件并打印路径和手动运行命令;用户自行执行与清理,snowman 不做这两件事。多环境项目暂存需显式 --env,用户未指明目标环境时应先询问。
限制:词法过滤器只拒绝写语句和已知副作用构造,无法证明 UDF 或外部函数是只读的,应使用最小权限连接和可信只读函数。不要绕过包装器规避拒绝。查询需要网络访问;若诊断发现沙箱网络限制,按审批流程处理。认证失败时遵循包装器提示与认证设置,不要读取或打印 .env、索取密钥或修改凭据。若 PATH 中缺少 snow,需先安装 Snowflake CLI。