跳转至

Define once. Use everywhere.

任何数据库、任何 Agent —— Apache Ossie 原生的指标语义层

用 Apache Ossie(原 OSI)把指标和语义模型定义一次。Dosi 把它们编译成 16 种数仓方言各自原生的 SQL —— DuckDB、Postgres、Snowflake、ClickHouse、StarRocks 等,再以 CLI、MCP、REST + Arrow、Python 四种形态交付给每个消费端。

一份 Apache Ossie YAML 文件交给 Dosi 语义运行时:定义一次,处处使用。左侧由 Dosi 数据库引擎把 SQL 编译并下推到 13 种以上方言:DuckDB、StarRocks、ClickHouse、Doris、TiDB、Trino、Postgres、MySQL、Snowflake、BigQuery、Databricks、Redshift、Hologres;右侧 Dosi 以同一份契约、多种接口对外提供服务:dosi CLI、REST API、零拷贝的 Arrow IPC,以及 MCP 服务,供 Agent、数据应用、BI 工具和人使用。

它解决什么问题

指标的含义,看板里写一遍,SQL 里写一遍,notebook 里又写一遍。写着写着就对不上了:一处过滤了已取消订单,另一处没过滤;一次不留神的 JOIN 把总额悄悄翻了倍。最后两个数都说自己"正确",却谁也对不上谁。

Dosi 把每个指标收敛到一处定义,SQL 由它生成。同一份定义,在每个数仓上都算得对,重复计数这类错误在设计上就被排除了。

基于 Apache Ossie

Apache Ossie(原名 Open Semantic Interchange,OSI)是语义模型的开放规范:数据集、关系、维度和指标用普通 YAML 写一次,就能在 BI 工具、AI Agent 和数据平台之间通用。

Ossie 定义指标是什么,Dosi 是让它跑起来的引擎:按上游规范校验模型、规划 JOIN,为每个数仓生成正确的 SQL。模型始终是标准 Ossie,不会被 Dosi 绑定。

30 秒看懂

在模型里定义一次,之后按名字取用:

$ export DOSI_EXAMPLES=~/.local/share/dosi/examples
$ dosi list metrics --model $DOSI_EXAMPLES/orders/model.yaml
NAME              KIND        DATASETS          DESCRIPTION
revenue           aggregate   orders            Total order amount
order_count       aggregate   orders            Number of orders
unique_customers  aggregate   orders            Distinct purchasing customers
avg_order_value   ratio       orders            Revenue per order (ratio)
total_margin      expression  orders, products  Revenue minus cost (expression over two aggregates)

$ dosi query --model $DOSI_EXAMPLES/orders/model.yaml \
    --metrics revenue --group-by orders.status --execute --db orders.db
status     revenue
completed  350
cancelled  100
2 rows

这个路径就是安装脚本放内置示例模型的地方,dosi info 也会把它打印出来。orders.db 由教程里的一条命令灌好。

换成 --dialect snowflake,SQL 就变了,模型一个字不用动。

团队为什么用它

  • 任何数据库


    同一份 Apache Ossie 模型能编译出 16 种方言的正确下推 SQL,从 DuckDB 到 Snowflake、StarRocks 到 DWS 和 Oracle。换数仓只改一个参数,不用重写。

  • 任何 Agent


    原生 MCP 服务让 Agent 用自然语言直接问指标。结构化错误简短明确——稳定错误码、候选名单、修复提示——Agent 据此自我纠正,而不是盲目重试。

  • 标准 Apache Ossie,不被绑定


    输入就是纯 Apache Ossie(原 OSI)YAML —— 一个开放的交换标准,自带与 dbt、Snowflake、Databricks、Tableau 等格式的双向转换器。SQL 指标定义进得来,也出得去。

  • 算得清的指标代数


    引擎知道每个指标是否可加、能否跨粒度上卷、能否预测;扇出保护保证绝不悄悄重复计数。这份代数知识也支撑起内置归因:一次调用解释指标为什么变了,用与该指标类型精确匹配的方法分解。

  • 够快,原生支持 Arrow


    比 MetricFlow 快 10–20 倍,内存约省 10 倍;结果以零拷贝的 Arrow 流式送进 DuckDB、Polars 或 pyarrow。数据见基准测试。

  • 接入方式随选


    CLI、REST + Arrow 服务、MCP 服务、Python 绑定,同一个引擎,同样的答案。

从这里开始


Dosi 是 Datus 的产品。获取使用权限、授权或技术支持,请联系 Datus 团队,也可以了解 Dosi 所支撑的商业化平台 Datus Studio。