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
Apache Ossie 是 Apache 基金会孵化中的开源标准,旨在跨分析、AI 和 BI 平台统一交换语义元数据,为语义层提供厂商中立的单一事实来源。本文将带你快速认识 Ossie 语义模型的五大核心要素——语义模型、数据集、关系、字段与指标,几分钟即可建立完整认知。
为什么需要一套语义标准?🤔
在真实的数据团队中,同一个"营收"指标在 BI 工具、数仓、AI 应用里往往各有一套定义,导致数字打架、人工反复对齐。Ossie 用一套 YAML 格式的语义模型规范解决这个问题:所有工具读写同一份模型,指标与维度只定义一次,处处一致。
上图来自 core-spec/expression_language.md:语义模型(逻辑层)位于物理数据库之上,向下对应原生 SQL,向上支撑更高层的本体定义。
五大要素一页总览 📋
| 要素 | 角色定位 | 一句话理解 |
|---|---|---|
| 语义模型(Semantic Model) | 顶层容器 | 一个完整的业务语义"说明书" |
| 数据集(Datasets) | 业务实体 | 对应事实表/维表,如订单、客户 |
| 关系(Relationships) | 外键连接 | 声明数据集之间如何关联 |
| 字段(Fields) | 行级属性 | 可用于分组、过滤和指标计算的属性 |
| 指标(Metrics) | 量化度量 | 跨数据集的聚合计算,如总营收 |
完整定义见核心规范 core-spec/spec.md,机器可读的 JSON Schema 见 core-spec/osi-schema.json。
要素一:语义模型——顶层容器
语义模型是 Ossie 的顶层结构,一次声明一个业务域,例如sales_analytics(销售分析)。它包含四个关键部分:
- name / description:模型名称与说明,是全局唯一标识
- datasets:模型下的逻辑数据集(必填)
- relationships:数据集之间的连接(可选)
- metrics:定义在模型级的指标(可选)
此外还支持ai_context字段,向 AI 工具注入自然语言指令、同义词和示例问题,让大模型更准确地理解业务含义——这是 Ossie 面向 AI 时代的关键设计。
要素二:数据集——业务实体的逻辑抽象
数据集对应业务实体,即数仓中的事实表和维表。核心属性包括:
| 属性 | 说明 |
|---|---|
name | 数据集唯一标识,如orders |
source | 物理表引用,如sales.public.orders |
primary_key | 主键,支持单列或复合主键 |
unique_keys | 唯一键集合 |
fields | 行级字段列表 |
例如"订单"数据集的source指向物理表,primary_key为order_id,还可以配上同义词purchases、sales,方便 AI 和用户在叫法不同时也能对上号。
要素三:关系——数据集之间的外键连接
关系声明两个数据集如何连接,方向固定为多端(from)指向一端(to),如:
orders_to_customers:orders.customer_id→customers.id
要点有三:
from_columns与to_columns的顺序必须一一对应、数量相同- 支持复合键,如订单行明细用
[product_id, variant_id]关联商品 - 关系也是"多对一"模型,与维度建模习惯一致
关系定义清楚后,指标才能跨数据集做聚合——这是后面"客单价"这类复合指标能成立的前提。
要素四:字段——分组、过滤与计算的行级属性 🧩
字段是数据集内的最小构件,用于分组、过滤以及参与指标表达式。两个设计亮点值得新手注意:
1. 多方言表达式:同一个字段可以携带多种 SQL 方言的实现,比如ANSI_SQL写LOWER(email),SNOWFLAKE写LOWER(email)::VARCHAR,各平台取用匹配的方言,缺失时回退到标准 SQL。规范支持ANSI_SQL、SNOWFLAKE、DATABRICKS、BIGQUERY、MDX、TABLEAU等方言。
2. 类型与角色分离:datatype描述"是什么类型"(如Date、Integer),而dimension.is_time描述"是否扮演时间维度角色"。例如审计列created_at虽是时间类型,也可显式设is_time: false排除出时间轴;反之整数年份列可设is_time: true参与时间序列分析。
表达式语言的完整提案见 core-spec/expression_language.md。
要素五:指标——模型级的量化度量 📊
指标是 Ossie 最有价值的部分:
- 定义在语义模型层级,而不是某个数据集内,因此可以跨多个数据集计算
- 表达式支持聚合函数,如
SUM(orders.amount)表示总营收 - 复合指标示例:
SUM(orders.amount) / COUNT(DISTINCT customers.id)表达"人均消费" - 通过
ai_context.synonyms配置同义词(如"revenue"、"total sales"),AI 问数时命中率更高
这意味着 KPI 的计算逻辑全组织只维护一份,从源头消除"指标漂移"。
加分项:自定义扩展与 AI 上下文
Ossie 通过custom_extensions让 Snowflake、Databricks、dbt 等厂商在核心规范之外携带私有元数据,转换时无损保留、其他工具自动忽略——扩展核心而不破坏兼容。ai_context则可在模型、数据集、字段、关系、指标每一级出现,让语义模型天然"读懂" AI。
动手实践:从示例到校验 ✅
想快速上手,建议按这个路径阅读:
- 读规范:core-spec/spec.md —— 五大要素的权威定义
- 看示例:完整的 TPC-DS 语义模型 展示了大型模型的全貌;flights.yaml 则是更贴近本体层的航班示例
- 跑校验:用官方校验脚本 validation/validate.py 对照 JSON Schema 检查你的模型,验证多方言表达式与引用完整性
- 学转换:查看 converters/README.md,了解 Ossie 与 dbt、Snowflake、Databricks 等格式之间的双向转换器
小结
Apache Ossie 用五个简洁的概念——语义模型、数据集、关系、字段、指标——搭起了厂商中立的语义层:模型定边界,数据集抽象实体,关系建立连接,字段承载属性,指标沉淀度量。理解这五要素,你就掌握了在 AI 与 BI 生态中交换业务语义的通用语言 🚀。更多背景可阅读项目文档 docs/index.md 中的常见问题与采用指南。
【免费下载链接】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),仅供参考