用途:把 Omni Analytics 的一个 topic 导出并转换为 Snowflake Semantic View 的 YAML 定义。先用 Omni API 探索模型,再将其定义翻译成 Snowflake 语义视图格式。
前置条件:需已安装 Omni CLI(参见 https://github.com/exploreomni/cli#readme),并用 omni config show 查看配置、omni config use <profile-name> 切换 profile,再以 omni whoami 确认已认证与权限。认证可用 API key 或 OAuth;返回 401 时应交给用户执行 omni config login <profile>(OAuth 2.1 浏览器流程)。可用 -o json 强制结构化输出。
运行环境:需先判断在 Cortex Code(Snowflake Notebooks/Cortex Analyst,可原生执行 SQL)还是外部环境(Claude Code、Cursor 等)。外部环境可选 Snowflake CLI(snow,推荐)、SnowSQL 或 snowflake-connector-python,并在进入转换步骤前与用户确认连接方式。
工作流程:先收集需求(要转换的 topic、语义视图名称、目标数据库与 schema、授权角色),再探索 Omni 模型(列出共享模型、获取 topic、relationships 及各 view 的 YAML),识别表与连接(把视图名映射为 Snowflake 表,处理 __ 分隔符与 omni_dbt_ 前缀,跳过派生 CTE),再解析字段列表(处理通配、tag 与排除规则,排除始终优先),构建关系(依据 join 层级与 on_sql),最后把维度映射为 dimensions 或 time_dimensions、度量映射为 metrics,布尔维度转为 filters。
限制:Snowflake 语义视图没有运行时参数系统,Omni 的 filter-only 字段需静态化,可依据 {{^ }} 回退块或 default_filter 解析,否则需警告用户并选择跳过、询问硬编码值或使用 1=1。若 schema 在 Snowflake 不存在应整表跳过。资料未提供完整执行结果、错误处理与性能表现等信息。