Apache Ossie转Snowflake Cortex Analyst转换器实战指南
2026/9/18 19:16:58 网站建设 项目流程

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三段式结构;如果sourceSELECTWITH开头,则会作为子查询放入definition字段。

2️⃣ 字段自动分类

Ossie 中不区分字段类型,转换器会根据规则自动归类到dimensionstime_dimensionsfacts三类:

  • 没有dimension声明的字段 → 事实(fact)
  • 显式声明dimension.is_time: true/false→ 永远以声明为准
  • 未声明时,日期/时间类字段(Date、DateTime 等)默认归为时间维度

3️⃣ 表达式方言选择

Ossie 支持多方言表达式,转换器会优先选择SNOWFLAKE方言;没有时回退到ANSI_SQL;两者都没有则跳过该字段并输出警告。

4️⃣ 数据类型映射

Ossie 类型Snowflake 类型
StringVARCHAR
IntegerNUMBER(38,0)
DecimalNUMBER
FloatFLOAT
BooleanBOOLEAN
Date/TimeDATE/TIME
DateTimeTIMESTAMP_NTZ
DateTimeTzTIMESTAMP_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_extensionslabel等无对应字段的属性会被自动丢弃,均伴随警告信息

只要关注终端输出的警告,你就能清楚知道哪些信息"留在了后面",不存在静默丢失。

延伸资源

资料路径
转换器说明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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询