☰
Apache Ossie JSON Schema详解:osi-schema.json逐行解读新手完整指南
2026/10/4 0:31:33 网站建设 项目流程

Apache Ossie JSON Schema详解:osi-schema.json逐行解读新手完整指南

【免费下载链接】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的朋友,一定绕不开 core-spec/osi-schema.json 这个文件——它是整个 Apache Ossie(语义模型交换的行业标准,前身为 OSI)的"宪法"。这个JSON Schema定义了语义模型(Semantic Model)的结构、类型与枚举,是 AI 工具、BI 平台之间交换语义元数据的唯一"官方合同"。本文将逐行带你读懂它,无需深厚编程背景。

一、osi-schema.json 是做什么的?

一句话定位:它是一个用于校验 Ossie 语义模型定义文件的 JSON Schema(2020-12 草案),对应文件头部的description字段:

"JSON Schema for validating Apache Ossie semantic model definitions"

在 Ossie 的三层架构中,osi-schema.json 规范的是逻辑层(Logical Layer)——即直接映射数据库的传统 BI 语义模型层:

图中标识了 Ossie 的三层模型:Ontological Layer(本体层)、Logical Layer(逻辑层,即本 Schema 管辖区)和 Physical(物理层,各数据库原生 SQL)。

二、顶层结构:只有 2 个字段,却条条必填 🧱

打开 osi-schema.json,前 22 行定义了文件骨架,逐行看:

行号字段作用
第 2 行$schema声明遵循 JSON Schema 2020-12 规范,校验器据此工作
第 4 行title文件标题:Apache Ossie Core Metadata Specification
第 8-12 行version必填,且必须等于"0.2.0.dev0"(const硬校验,写错即不通过)
第 13-19 行semantic_model必填,语义模型定义数组(一个文件可含多个模型)
第 21 行requiredversion和semantic_model缺一不可
第 22 行additionalProperties: false禁止任何未定义字段——这是 Ossie 防"方言漂移"的关键设计

💡 新手要点:顶层只允许这两个字段,想加别的?不存在的。所有厂商定制需求都被赶到custom_extensions里(后文详述)。

三、$defs 速览:13 个定义,分四大类 📚

第 23 行开始进入$defs(可复用的类型定义库),按职责可分为四组:

1️⃣ 基础枚举:Dialect 与 DataType

  • Dialect(第 24 行):表达式的方言枚举,共 7 种:ANSI_SQL、SNOWFLAKE、MDX、TABLEAU、DATABRICKS、MAQL、BIGQUERY。它让同一字段/指标可以携带多种方言的 SQL 写法,实现跨平台移植。
  • DataType(第 111 行):10 种逻辑数据类型——String、Integer、Decimal、Float、Boolean、Date、Time、DateTime、DateTimeTz、Opaque。注意DateTimeTz表示"带时区上下文的时刻",而Opaque是"逃生通道":遇到不可移植的类型,用它加custom_extensions标记。

2️⃣ 扩展机制:AIContext 与 CustomExtension

  • AIContext(第 34 行):给 AI 工具的上下文,oneOf二选一——直接写一段字符串,或写对象(含instructions使用指令、synonyms同义词、examples示例问题)。这就是 Ossie 拥抱 AI/BI 场景的体现。
  • CustomExtension(第 66 行):厂商自定义扩展,结构固定为vendor_name(任意字符串)+data(JSON 字符串),两项均必填。各 BI 平台可在此夹带私货而不破坏核心兼容性。

3️⃣ 核心实体:一张表看懂必填项 ✅

定义含义必填字段
SemanticModel顶层容器,一个完整语义模型name、datasets(至少 1 个)
Dataset逻辑数据集(事实/维度表)name、source(物理表如db.schema.table或查询)
Field行级属性,用于分组/过滤name、expression
Relationship数据集间外键关系(多对一/一对一)name、from、to、from_columns、to_columns
Metric跨数据集的量化度量(KPI)name、expression
Dimension维度元数据无(仅含is_time布尔标记)
Expression/DialectExpression多方言表达式dialects(至少 1 项)/dialect、expression

4️⃣ 表达式设计:多方言是本 Schema 的"杀手锏"

Expression要求dialects数组至少 1 项(minItems: 1),每项是dialect+expression的组合。一个指标可以这样同时给 Snowflake 和 BigQuery 各写一份 SQL,下游工具按自己的方言取用——这就是"厂商中立"的具体落点。

四、三个最容易踩坑的细节 ⚠️

  1. is_time有默认逻辑(第 131 行):不显式设置时,datatype为Date/Time/DateTime/DateTimeTz的字段自动视为时间维度;审计时间戳这类"日期但不是时间维度"的列,需显式写is_time: false。
  2. 所有实体都写了additionalProperties: false:每个字段名都被锁死,拼写错误会被校验直接拦下,而不是静默忽略。
  3. from是"多"端、to是"一"端(第 236-243 行):from_columns与to_columns必须一一对应,支持复合键。

五、写完后如何一键校验? 🚀

项目自带校验器 validation/validate.py,它做四件事:

  1. 用本 Schema 校验结构、类型、枚举;
  2. 检查数据集/字段/指标/关系名称唯一;
  3. 检查关系引用的数据集是否存在;
  4. 用 sqlglot 按方言校验 SQL 表达式语法(MDX、TABLEAU、MAQL 自动跳过)。

对示例文件运行:

python validation/validate.py examples/tpcds_semantic_model.yaml

看到Validation PASSED就说明你的语义模型完全符合规范。完整示例可参考 examples/tpcds_semantic_model.yaml。

六、延伸阅读 📖

  • 人类可读规范:core-spec/spec.md
  • YAML 版字段说明(注释极详尽):core-spec/spec.yaml
  • 表达式语言规范:core-spec/expression_language.md
  • 官方转换器(dbt、GoodData、Snowflake 等):converters/

🎯总结:osi-schema.json 用约 350 行 JSON,定义了"版本锁 + 语义模型数组"的顶层契约和 13 个核心类型,配合"禁扩展字段 + 厂商扩展区"的双轨设计,实现了严格、中立、可扩展三者的平衡。读懂它,就拿到了整个 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),仅供参考

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

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

立即咨询