版本发布记录¶
未发布¶
新功能
dosi lineage。dump把指标血缘图打印成 JSON;view把它渲染成一个自包含的 页面并打开——就是 0.1.8 起Engine.lineage()返回的那张图,现在命令行也能拿到。 参见血缘。- 血缘图上的 ontology 层。 加载 Apache Ossie ontology 后,图上多出它的概念:每个
实体落在哪个数据集上、每条关系由哪些 join 实现,以及——对 ontology 派生出的指标——
让两个 SQL 相同的指标含义不同的那条路径。
Engine(...)接受ontology_path、ontology_text和mapping。
变更
- 指标的维度现在是 Dosi 推荐的那一份,而不是它能到达的全部字段。 血缘图列出的与
dosi list dimensions --metric一致,顺序也一致:主键、外键, 以及被某个指标聚合的列都不在其中。没有列出的名字仍然可以分组——这个判定只是不推荐, 从不阻止显式--group-by。 - 图里每个字段都带
label——模型里给该字段写的label,没写就是字段名。 Engine(...)的 ontology 参数只能以关键字传入,且排在原有参数之后,所以按 0.1.10 写的 位置参数调用含义不变。无法解析或降低的 ontology 抛出 code 为ontology的ModelError; 加载错误里重新带上文件路径。
0.1.10¶
新功能
- 明细查询。
dosi select返回明细行,而不是聚合后的指标,比如 "Enterprise 客户最大的 100 笔订单"。你只管点名要哪些字段,连接由 Dosi 算 出来;会导致结果重复的连接,它宁可拒绝也不把重复的行交给你。参见 明细查询。 - 存成字符串或数字的时间列。 时间列不再必须是真正的
DATE。声明这一列 实际存的是什么(20240131、2024-01、2024年01月31日),Dosi 就能正确 分组和过滤,且不丢失分区裁剪。查询写法不变:始终写2024-01-31。参见 D-FORMAT。 - 组合指标可以基于另一个组合指标。 一个公式只写一次、可以复用,不必在每个 用到它的指标里重写一遍——而重写时抄歪了,以前是照样编译通过的。
增强
- 用了 OSI 标准
datatype属性的模型现在可以加载,Apache Ossie 的 TPC-DS 参考模型也在其中。 --order指定的是一个指标,或者你 group by 的某个字段,不必去对上引擎生成 的列名。
缺陷修复
- 参数取值是中文(或任何非 ASCII 文本)时,每个值生成的列名都一样;一次绑定 多个值还会让查询直接失败。
- 存成整数的时间列在 MySQL、TiDB、ClickHouse 上,上卷到月或年会失败。
0.1.9¶
Dosi 现在采用 Elastic License 2.0:可以自由使用和再分发,只是不能作为托管 服务转售。它取代了 0.1.5 引入的专有许可——那份许可在没有另行协议时不授予任何 权利。
新功能
- BigQuery 可以执行查询。 此前它只能编译:Dosi 生成 SQL,但拒绝执行。现在 可以执行,并在真实项目上跑通了完整测试语料。参见 BigQuery。
- 华为云 DWS 成为受支持的数仓。它的兼容模式(
ora、td、mysql)会影响 生成的 SQL,所以 Dosi 会从数据库读取模式,并拒绝执行为另一种模式编译的查询。 参见华为云 DWS。 - 指标血缘(仅 Python)——
Engine.lineage()返回指标背后的关系图:表 → 数据集 → 指标 → 派生指标。图要交给信任边界之外时,传redact_sql=True。 - 建模契约(仅 Python)——
render_datus_authoring_spec()返回本引擎实际 执行的建模规则并附摘要,生成模型的工具可以据此确认自己依据的是同一份规则。 - 从镜像安装。
install.sh新增DOSI_SOURCE=github|oss|cloudflare。中国 大陆请用DOSI_SOURCE=oss:从 GitHub 下载只有几十 KB/s,还经常卡死。两种 来源都会校验归档包的校验和。本版本没有填充 Cloudflare 镜像。
增强
install.sh可以装在 macOS 上,此前它对任何非 Linux 主机一律拒绝。- 校验会返回每个指标最终编译成了什么;Python 的连接配置可以直接在内存里传, 不再触发明文密钥告警——那条告警本来只对磁盘上的连接文件才有意义。
- 新增 BigQuery 和华为云 DWS
两页文档,以及一个 20 万行的示例数据库
https://dosi.datus.ai/orders-200k.duckdb。
缺陷修复
- 宽度为 1 个周期的滚动窗口,或
preceding边界为 0,会生成 Doris 和 StarRocks 直接拒绝的 SQL,于是--param n=1,3,6这样普通的查询在这两个引擎 上失败。
0.1.8¶
这一版没有发布 wheel,所以 dosi-engine 用户从 0.1.7 直接到 0.1.9,那一版
包含这里的全部内容。二进制只发布了 Linux x86_64、Linux aarch64 和 Apple
Silicon 三个目标——Intel Mac 请装 0.1.9。
新功能
- 归因:这个指标为什么变了。 给 Dosi 一个指标、要看的维度和两个时间窗口, 它自己把查询跑完,返回按贡献排序的分解结果,每个分段都附带下一步下钻可直接 用的过滤条件。用哪种方法由指标自身的代数结构决定;分解不了的指标会返回 结构化的"不支持"并说明原因,而不是给一个错的数。参见 解释指标变化。
- 参数化指标。 指标的窗口宽度、偏移、排名分桶、过滤取值,都可以是查询时
参数:一个
moving_avg(n)顶掉r7/r30/r90,一次查询还能同时要多个 取值,一个取值一列。参见参数化指标。
增强
dosi list metrics会说明一个指标能不能做归因、用哪种方法,不必真跑一次分析 就能先确认。- 一次查询可以带多个具名时间窗口,由一条语句一次返回。
行为变化
- 如果你在用 0.1.7 wheel 的
Engine.attribute():分母不为正的分段,占比字段 现在可能不存在,无条件读取这两个字段的代码需要处理这种情况。
0.1.7¶
这一版是拆开发的:二进制和 wheel 相隔三天、由不同提交构建,所以 wheel 的 内容更多。
新功能
- 多了一个更小的下载包 ——
dosi-<version>-<target>-lean.tar.gz只含两个 可执行文件。它照样能编译查询、连上所有数仓;本地 DuckDB 的执行交给 PATH 上 的duckdbCLI。 - 派生指标(D-DERIVE)M2 —— 窗口可以建在派生指标之上,组合也可以包含窗口 成员。
- SQLite 文件可以通过 DuckDB 读取。
- 错误码参考,含每种拒绝的含义清单。
- 归因分析首个版本(仅 wheel)——
Engine.attribute()。0.1.8 在此之上做了 扩展,升级前请先看上面那条行为变化。
增强
- DuckDB 每个进程的启动快了约 200 ms:一次性的
dosi query --execute从 249 ms CPU 降到 41 ms。查询本身的速度不变,省下的是启动开销。
缺陷修复
- Redshift 真的按 Redshift 渲染了。 此前它落到通用生成器上,产出的是 Postgres SQL。
- wheel 在 cargo 1.93 及更高版本下能构建。
0.1.6¶
仅 wheel —— dosi 和 dosi-server 用户从 0.1.5 直接到 0.1.7。
新功能
- 新增 Linux aarch64 的 wheel,Graviton 和 arm64 容器不必再从源码构建。
- SQLite 文件可以通过 DuckDB 读取,本地
.sqlite文件因此成了可用的连接, 适合测试和小模型。 - 导出
CONNECTION_TYPES,调用方可以直接列出某个 wheel 构建时带上了哪些数仓。
0.1.5¶
Dosi 的首个公开版本。 从这一版起,项目只以二进制和 wheel 的形式发布,不再
发布源码归档。安装:curl -fsSL https://dosi.datus.ai/install.sh | sh 拿到
dosi 和 dosi-server 可执行文件,pip install dosi-engine 拿到 Python
绑定。
它做什么:加载 OSI 语义模型、校验、把指标查询编译成你所用数仓的 SQL,然后执行。
十五个数仓 —— DuckDB · StarRocks · ClickHouse · Doris · TiDB · Trino ·
Postgres · MySQL · Snowflake · BigQuery · Databricks · Redshift · Hologres ·
GaussDB · Oracle。四种入口:dosi CLI、REST、MCP、Python wheel。两种模式:
--osi-datus 遵循 Datus 扩展,--osi-basic 是严格的标准 OSI。
0.1.5 之前的版本从未发布。