Apache Ossie转Snowflake Cortex Analyst转换器实战指南
【免费下载链接】ossieApache Ossie, industry wide specification effort to standardize how we exchange semantic metadata across analytics, AI and BI platforms, providing a vendor neutral, single source of truth for semantic data项目地址: https://gitcode.com/GitHub_Trending/osi1/ossie
Apache Ossie 是行业公认的语义元数据交换标准,而Ossie 转 Snowflake 转换器可以把你用 Ossie YAML 编写的语义模型,一键转换为 Snowflake Cortex Analyst 可直接使用的语义模型文件。整个转换过程完全离线,无需连接 Snowflake,只需两行命令即可完成,非常适合刚接触语义模型交换的新手。
为什么需要 Ossie 转 Snowflake 转换器?
同一个 KPI 在 BI 工具、AI Agent、数据平台中常常被定义得各不相同。Apache Ossie 提供了一个厂商中立、基于 YAML/JSON 的单一事实来源,让"销售额""净利率"这些定义在所有工具间保持一致。
而 converters/snowflake/ 目录下的参考转换器,正是这个"单一事实来源"通往 Snowflake AI 分析能力的一座桥梁:
- 输入:一份符合 Ossie 规范的 YAML 语义模型(表、字段、关系、指标、同义词、AI 上下文一应俱全)
- 输出:Cortex Analyst 可直接加载的语义模型 YAML(tables、dimensions、metrics 等标准结构)
- 过程:纯本地文件转换,离线运行,不产生任何网络调用
快速上手:三步完成转换
第 1 步:获取代码
git clone https://gitcode.com/GitHub_Trending/osi1/ossie cd ossie/converters/snowflake第 2 步:准备环境
项目使用 uv 管理依赖,运行uv sync即可自动安装 PyYAML 等全部依赖(需 Python ≥ 3.11)。
第 3 步:执行转换
uv run ossie-snowflake -i ../examples/tpcds_semantic_model.yaml -o output.yaml看到Converted ... -> output.yaml即表示成功。输入文件也可以换成你自己的 Ossie 模型,examples/ 目录下还附带了 flights 示例可供练习。
💡 转换前建议先用 validation/validate.py 校验模型是否符合 Ossie 规范,可对照 core-spec/ossie-schema.json 检查字段合法性。
看懂转换规则:输入输出如何对应?
这是转换器最核心的部分,源码实现见 converters/snowflake/src/ossie_snowflake/converter.py。
1️⃣ 数据集 → 表
Ossie 的datasets会变成 Snowflake 的tables,其中source(形如tpcds.public.store_sales)被拆分为database / schema / table三段式结构;如果source以SELECT或WITH开头,则会作为子查询放入definition字段。
2️⃣ 字段自动分类
Ossie 中不区分字段类型,转换器会根据规则自动归类到dimensions、time_dimensions、facts三类:
- 没有
dimension声明的字段 → 事实(fact) - 显式声明
dimension.is_time: true/false→ 永远以声明为准 - 未声明时,日期/时间类字段(Date、DateTime 等)默认归为时间维度
3️⃣ 表达式方言选择
Ossie 支持多方言表达式,转换器会优先选择SNOWFLAKE方言;没有时回退到ANSI_SQL;两者都没有则跳过该字段并输出警告。
4️⃣ 数据类型映射
| Ossie 类型 | Snowflake 类型 |
|---|---|
String | VARCHAR |
Integer | NUMBER(38,0) |
Decimal | NUMBER |
Float | FLOAT |
Boolean | BOOLEAN |
Date/Time | DATE/TIME |
DateTime | TIMESTAMP_NTZ |
DateTimeTz | TIMESTAMP_TZ |
5️⃣ AI 上下文与同义词
Ossie 的ai_context.synonyms会被完整保留为 Snowflake 的synonyms——这是让自然语言问答("上个月的零售销售额")更准确的关键信息,转换后 AI 助手会直接受益。
实战示例:TPC-DS 零售模型
仓库内置了一个完整的 TPC-DS 零售模型 examples/tpcds_semantic_model.yaml,包含 5 张表、4 条表关系、9 个跨表指标。转换后对照 converters/snowflake/tests/example_converted_tpcds_semantic_model.yaml,可以看到典型的变化:
- 主键
[ss_item_sk, ss_ticket_number]变为结构化的primary_key: {columns: [...]} - 关系
from/to + 列数组变为left_table/right_table + relationship_columns - 指标
SUM(store_sales.ss_ext_sales_price) / COUNT(DISTINCT customer.c_customer_sk)(客户生命周期价值)原样保留为expr
回归测试覆盖了上述全部场景,运行uv run pytest即可验证(测试文件:test_ossie_to_snowflake_yaml_converter.py)。
注意事项与已知限制
- ⚠️ 该转换器处于积极开发阶段,官方提示生产环境使用需谨慎
Opaque类型无法映射,转换时会省略 data_type 并给出警告- 关系(relationship)上的
ai_context在 Snowflake 中没有对应概念,会被丢弃并提示 - 指标(metric)的
datatype不会输出——Snowflake 会根据表达式自行推断结果类型 custom_extensions、label等无对应字段的属性会被自动丢弃,均伴随警告信息
只要关注终端输出的警告,你就能清楚知道哪些信息"留在了后面",不存在静默丢失。
延伸资源
| 资料 | 路径 |
|---|---|
| 转换器说明 | converters/snowflake/README.md |
| Ossie 核心规范 | core-spec/spec.md |
| 表达式语言说明 | core-spec/expression_language.md |
| 其他格式转换器(dbt、Omni、Sigma 等) | converters/README.md |
| 项目文档 | docs/index.md |
掌握这个转换器后,你就可以用一份 Ossie 模型同时对接 Snowflake Cortex Analyst 和生态中的其他工具——这正是 Apache Ossie "一次定义、处处一致"的初衷。
【免费下载链接】ossieApache Ossie, industry wide specification effort to standardize how we exchange semantic metadata across analytics, AI and BI platforms, providing a vendor neutral, single source of truth for semantic data项目地址: https://gitcode.com/GitHub_Trending/osi1/ossie
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考