
副标题 :从 AGPL → BSL → Apache-2.0 的 License 三段史,OSI 标准联盟核心成员,AI 时代指标层的事实标准
赛道 :语义层 · 单点深挖第 2 篇(DPROD 368 之后的 L2 搭档)
作者 :飞熊 · 增长运营官 yunying 出品
时间:2026-08-19
一、引子:飞熊客户问 ” 我装了 dbt 怎么还是指标乱套?”
上周一个零售客户的 BI 团队找我,说他们已经用 dbt 把数据仓库梳理清楚了,但 业务部门还在吵架 ——
“Tableau 里的 ” 营收 ” 是 1.2 亿,Looker 里是 1.35 亿,Excel 里 SQL 算出来是 1.18 亿。到底哪个对?“
问题不在 dbt(转换层),而在 缺一个 ” 指标层 ” —— 让所有 BI 工具、AI Agent、SQL 客户端查 ” 营收 ” 都返回同一个数。
这就是 MetricFlow 存在的意义。
它是 dbt Labs(dbt-core 同一团队)打造的语义层执行引擎,跟 DPROD 互补但不同层(DPROD 是 L3 本体层,MetricFlow 是 L2 指标层)。上一篇文章《语义层四层模型》(?p=370)飞熊讲过 4 层关系,本文专注 MetricFlow 的 ” 硬核真相 ”。
更重要的是 —— MetricFlow 的 License 演化史 是飞熊读者必须知道的雷点:AGPL-3.0(传染性)→ BSL(4 年限制商用)→ Apache-2.0(终于开源),选错版本就会陷入法律风险。
二、MetricFlow 是什么:执行引擎 + OSI 标准核心
跟 DPROD 一样,MetricFlow 也有两层身份,但跟 DPROD 完全相反:
| 层级 | 含义 | 关键载体 |
|---|---|---|
| 执行层 | Python 库 + SQL 生成器 | dbt-labs/metricflow GitHub 仓库 |
| 标准层 | OSI(Open Semantic Interchange)标准核心 | Snowflake 牵头 16 家联盟 |
一句话定性
MetricFlow = dbt Labs 出的 ” 指标 SQL 编译器 ”,把 Metric/Dimension/Entity 定义 → dataflow query plan → 各方言 SQL(Postgres / Snowflake / BigQuery / Databricks / Redshift),让所有 BI 工具查到的 ” 营收 ” 都是同一个数。
关键事实(GitHub 实测)
| 维度 | 详情 |
|---|---|
| 仓库 | github.com/dbt-labs/metricflow |
| 出品 | dbt Labs(CEO/ 创始人:Tristan Handy,2016 年创立) |
| 当前版本 | 0.209+(2024-Q4 进入 Apache-2.0 时代) |
| License | Apache-2.0 ✅(0.209+)—— ⚠️ 历史版本 AGPL/BSL 详见第六节 |
| 技术栈 | Python + Pydantic 2.x + 部分 Rust SQL 编译器 |
| 安装 | pip install dbt-metricflow |
| 依赖 | 必须装 dbt 项目 + dbt adapter(不是 standalone) |
| 核心能力 | Metric + Dimension + Entity → dataflow → 各方言 SQL |
| OSI 关系 | OSI 创始成员(详见第七节) |
| 维护状态 | 活跃(PR #2070 2026-06-16 仍在提交) |
三、关键人物与生态:dbt Labs + OSI 联盟
1. dbt Labs 公司背景
- 创始人 /CEO:Tristan Handy(2016 年创立,原名 Fishtown Analytics)
- 总部:美国费城 → 现总部 旧金山
- 商业模式:dbt Core 开源 + dbt Cloud 商业(Starter / Enterprise / Enterprise+ 三档)
- 客户量:5,000+ 付费客户,ARR 超 1 亿美元(2024 数据)
- 融资:D 轮 + Series D 总融资额 ~$3.7 亿
- 核心产品线:
- dbt-core(开源 ELT 框架,?p=290)
- dbt Cloud(商业 SaaS)
- dbt Semantic Layer(包含 MetricFlow + GraphQL API + 集成)
关键判断:dbt Labs 已经是数据栈领域的事实标准之一,MetricFlow 是 dbt 生态向上延伸到 ” 指标层 ” 的战略拼图。
2. OSI 联盟(16 家巨头)
OSI(Open Semantic Interchange)是 Snowflake 在 dbt Coalesce 2025 上牵头发起的 语义模型交换标准联盟 。MetricFlow 是 OSI 创始成员 之一。
| 类别 | 公司 |
|---|---|
| 数据平台 | Snowflake(牵头)、Alation、Atlan、Select Star |
| 语义层厂商 | Cube、dbt Labs(MetricFlow)、AtScale、RelationalAI、Hex |
| BI / 分析 | Looker/Google、Sigma、ThoughtSpot、Omni、Blue Yonder |
| AI | Mistral AI、Salesforce、Elementum AI、Honeydew、BlackRock |
关键判断:2026 主流语义层厂商都加入了 OSI。MetricFlow 在 L2 指标层有 ” 标准联盟票 ”。
四、技术架构:dataflow-based query plan + SQL 编译器
MetricFlow 的技术核心是“ 把指标查询编译成数据流图,再翻译成 SQL”。
1. 三层抽象模型
| 抽象 | 飞熊类比 | YAML 示例 |
|---|---|---|
| Semantic Model(语义模型) | 数据库里的 ” 表 ” | semantic_models: [orders, customers] |
| Dimension(维度) | 表里的 ” 分析角度 ” | dimensions: [region, time, customer_segment] |
| Entity(实体) | 表之间的 ” 连接键 ” | entities: [customer_id, order_id] |
| Metric(指标) | 业务定义的 ” 数 ” | metrics: [revenue_total, orders_count] |
2. dataflow query plan(核心创新)
MetricFlow 的命名来源 :”Metric + Flow” = 把 Metric 查询编译成一个 数据流图(dataflow-based query plan)。
用户查询:" 上季度华东区营收 "
↓
[Compile] ← MetricFlow 解析器
↓
┌──────────────────────────────────────┐
│ dataflow query plan (DAG) │
│ │
│ [Source] → [Join] → [Aggregate] → │
│ orders customers region='华东' │
│ time='last_quarter'│
└────────────────┬─────────────────────┘
↓
[Optimize] ← 优化器
↓
[Render] ← SQL 翻译器
↓
SELECT SUM(amount) FROM orders
JOIN customers ON ...
WHERE region = '华东'
AND quarter = '2025Q2'
核心优势:
–
多跳连接(Multi-hop joins):自动处理 ” 订单 → 客户 → 区域 ” 这种链式 join
–
复杂指标(ratio / cumulative / derived):自动计算转化率、累计、同比
–
多时间粒度:自动 group by 日 / 周 / 月 / 季度 / 年
–
方言适配:同一份查询 → 不同数据仓库的方言 SQL
3. 五大数据仓库方言适配
| 数据仓库 | 方言支持 | 性能 |
|---|---|---|
| Snowflake | ✅ 完整 | ⭐⭐⭐⭐ |
| BigQuery | ✅ 完整 | ⭐⭐⭐⭐ |
| Databricks | ✅ 完整 | ⭐⭐⭐⭐ |
| Postgres | ✅ 完整 | ⭐⭐⭐ |
| Redshift | ✅ 完整 | ⭐⭐⭐ |
4. 关键代码示例
# models/metrics/revenue.yml
metrics:
- name: revenue_total
label: " 总营收 "
type: simple
type_params:
measure: revenue_usd
description: " 所有订单的美元营收总和 "
- name: revenue_per_customer
label: " 客单价 "
type: ratio
type_params:
numerator: revenue_total
denominator: distinct_customer_count
# 安装
pip install dbt-metricflow dbt-snowflake
# 查询(CLI)mf query --metrics revenue_total \
--group-by metric_time__quarter,region__region_name \
--order revenue_total desc \
--limit 10
# 自动生成 SQL:# SELECT
# DATE_TRUNC('quarter', order_date) AS metric_time__quarter,
# customers.region AS region__region_name,
# SUM(orders.revenue_usd) AS revenue_total
# FROM orders
# JOIN customers ON orders.customer_id = customers.id
# GROUP BY 1, 2
# ORDER BY 3 DESC
# LIMIT 10
五、License 历史大坑(飞熊必读)
这是 MetricFlow 最被忽视的雷点,飞熊客户咨询时 100% 要问。
License 三段史(必须知道)
v0.0 ──────── v0.140.0
├─ License: AGPL-3.0(传染性强!)└─ 影响:任何 SaaS 服务基于 MetricFlow 必须开源
v0.150.0 ────── v0.208.2
├─ License: BSL(Business Source License,4 年后转 Apache)├─ PR #462 (2023-04-28) 提交变更
└─ 影响:禁止商业 SaaS 重新打包销售
v0.209.0+ ───── 至今(当前)├─ License: Apache-2.0 ✅
├─ 2024-Q4 dbt Labs 决定彻底开源
└─ 影响:商用 + 修改 + 闭源都可以
飞熊客户必问 5 个 License 问题
- 我们现在装的 MetricFlow 是哪个版本? —— 检查
pip show dbt-metricflow的 Version 字段 - 是否锁版本 ≥ 0.209.0? —— 锁
>=0.209.0在 requirements.txt / pyproject.toml - AGPL/BSL 版本有暴露风险吗? —— 自托管 SaaS 客户必须确认
- dbt Cloud 服务条款怎么覆盖 MetricFlow? —— dbt Cloud Starter/Enterprise 已经把 MetricFlow 包含
- 未来 dbt Labs 会不会再改 License? —— dbt Labs 官方说 ” 承诺长期 Apache-2.0″
三种 License 商用风险矩阵
| License | 自用 | 自托管商业 | SaaS 重新打包 | 修改 + 闭源 |
|---|---|---|---|---|
| AGPL-3.0 (≤0.140) | ✅ | ⚠️ 谨慎 | ❌ 禁止 | ❌ 禁止 |
| BSL (0.150-0.208) | ✅ | ✅ | ❌ 禁止 | ⚠️ 受限 |
| Apache-2.0 (0.209+) | ✅ | ✅ | ✅ | ✅ |
核心建议 : 所有新项目锁 0.209.0+,老项目升级前必须做 License 合规审计。
六、跟飞熊已调研项目关系:L2 Metric Layer 双雄之一
MetricFlow 在飞熊已调研的 8 篇数据治理 + AI Agent 项目里,主要跟 L1/L2/L3 层互补。
L2 Metric Layer 双雄:MetricFlow vs Cube.js
| 维度 | MetricFlow | Cube.js |
|---|---|---|
| 出品 | dbt Labs | Cube Dev |
| License | Apache-2.0 ✅(0.209+) | Apache-2.0 + MIT ✅ |
| 语言 | Python | Rust + TypeScript |
| 核心场景 | dbt 生态 + BI 工具 | 嵌入式 BI + SaaS 产品 |
| 前端组件 | 无 | ✅ React 组件库 |
| OSI 创始 | ✅ | ✅ |
| Stars | ~1K(GitHub 主仓) | 20K ⭐ |
| dbt 依赖 | 必装 | 可独立用 |
飞熊选型决策:
| 场景 | 推荐 |
|---|---|
| 已经在用 dbt | MetricFlow(无缝衔接) |
| 要做 SaaS 嵌入式 | Cube.js |
| 团队 Python 强 | MetricFlow |
| 团队 JS/TS 强 | Cube.js |
| AI Agent 消费指标 | 都行(看 dbt 依赖) |
跟其他已调研项目关系
| 已调研 | 关系 | 配套场景 |
|---|---|---|
| Cube.js (?p=282) | L2 双雄(OSI 同盟) | 选 MetricFlow 还是 Cube 看 dbt 依赖 |
| dbt-core (?p=290) | 必装前置 | MetricFlow = dbt 的 ” 指标层扩展 ” |
| DPROD (?p=368) | L3 vs L2 互补 | MetricFlow 算指标,DPROD 描述数据产品 |
| 语义层四层 (?p=370) | L2 主角 | 本文是该横评的 MetricFlow 单点深挖 |
| DataHub (?p=330) | L1 消费 L2 | DataHub catalog 展示 MetricFlow 指标 |
| OpenMetadata (?p=366) | L1 消费 L2 | OpenMetadata 集成 dbt + MetricFlow |
飞熊 BI 栈全景图里的 MetricFlow
┌──────────────────────────────────────────────┐
│ 消费方 │
│ • BI 工具(Tableau/Looker/Sheet)│
│ • AI Agent(通过 MCP/GraphQL)│
│ • 嵌入式分析(Cube.js React)│
└─────┬──────────────────┬──────────────┬─────────┘
│ GraphQL │ SQL │ JDBC
▼ ▼ ▼
┌──────────────────────────────────────────────┐
│ L2 Metric Layer │ ← MetricFlow / Cube.js
│ │ dbt Semantic Layer GraphQL API
├──────────────────────────────────────────────┤
│ L1 Discovery Layer │ ← DataHub / OpenMetadata
├──────────────────────────────────────────────┤
│ 转换层 │ ← dbt-core (必装)
├──────────────────────────────────────────────┤
│ 存储层 │ ← Snowflake / BigQuery / Databricks
└──────────────────────────────────────────────┘
关键判断 :MetricFlow 是 dbt 生态向上延伸到 L2 的必经之路。你装了 dbt 但没装 MetricFlow, 指标一致性还得靠 ” 约定俗成 ”。
七、OSI(Open Semantic Interchange)核心 + MetricFlow 角色
OSI = 2026 语义层标准联盟,飞熊在 370 文章讲过 4 层关系,本文专注 MetricFlow 在 OSI 中的位置。
OSI 关键设计(重述)
| 维度 | OSI |
|---|---|
| 核心模型 | YAML 格式 的语义模型标准 |
| API | 统一的 vendor-neutral query API |
| 生态 | Apache 开源项目 |
| 核心原则 | 标准化 / 互操作 / 可扩展 / 开源 / 域特定模型 |
MetricFlow 在 OSI 的 3 个角色
- 语义模型标准参考实现 —— MetricFlow 输出的 YAML 格式是 OSI 的事实标准
- query API 贡献方 —— dbt Cloud 的 GraphQL API 是 OSI query API 的参考实现
- 跨工具映射 —— MetricFlow 跟 Cube.js 共同承诺支持 OSI 双向映射
MetricFlow + OSI 实战流程
1. 用户在 dbt 项目里定义 Metric(YAML)↓
2. MetricFlow 编译 → dbt Semantic Layer GraphQL API
↓
3. 通过 OSI 映射器 → 任意 BI 工具(Tableau/Looker/PowerBI)↓
4. BI 工具用 GraphQL 查询 → 拿到统一指标
↓
5. AI Agent 通过 OSI query API → 直接查 " 营收 "
关键判断:
- ❌ 没有 OSI 之前:每个 BI 工具单独集成 MetricFlow(N×N 适配)
- ✅ 有 OSI 之后:MetricFlow → OSI → 任意 BI 工具(N+M 适配)
八、飞熊咨询变现场景:3 大场景 + 4 步实战
3 大场景
场景一:金融 / 制造 ” 指标口径统一 ”(高客单价)
客户痛点:业务部门报表口径不一致,“ 营收 ” 差 5%+
方案:
– 装 dbt + MetricFlow(0.209+)
– 把所有 Metric 定义迁移到 YAML
– 业务部门统一通过 GraphQL 查指标
报价:30-80 万(含咨询 + 实施 + 培训 6 个月)
场景二:SaaS 产品 ” 嵌入式指标 API”(2026 刚需)
客户痛点:客户要求 SaaS 加 BI 报表,每个客户都问 ” 我能不能自己定义指标 ”
方案:
– 装 MetricFlow + 暴露 GraphQL API
– 客户在 dbt 项目里定义自己的 Metric
– 通过 GraphQL 给前端 / AI Agent 用
报价:15-30 万(含 dbt 集成 + API 封装)
场景三:多 BI 工具 ”OSI 标准化 ”(前瞻项目)
客户痛点:Tableau + Looker + 自研 BI 各查各的,AI Agent 找不到一致数据
方案:
– dbt + MetricFlow + OSI 映射器
– 统一通过 OSI GraphQL API 对外
– 所有 BI 工具接 OSI
报价:50-100 万(大型企业级项目)
实战 4 步(飞熊演示用)
Step 1 · 装 dbt + MetricFlow
pip install dbt-core dbt-snowflake dbt-metricflow
dbt init my_metrics_project
mf tutorial
Step 2 · 定义第一个 Metric
# models/metrics/orders.yml
metrics:
- name: orders_total
label: " 总订单数 "
type: simple
type_params:
measure: orders_count
Step 3 · 用 CLI 查询验证
mf query --metrics orders_total \
--group-by metric_time__month \
--order metric_time__month
# 输出:# metric_time__month | orders_total
# 2025-01 | 12,345
# 2025-02 | 13,456
# ...
Step 4 · 暴露 GraphQL API(dbt Cloud / 自托管)
# dbt Cloud: 自动暴露,URL = https://your-account.dbt.com/api/graphql
# 自托管:dbt Semantic Layer Helm chart
helm install dbt-sl dbt-labs/dbt-semantic-layer
# GraphQL endpoint: http://dbt-sl:8080/graphql
AI Agent 调用示例:
import requests
response = requests.post("http://dbt-sl:8080/graphql", json={
"query": """
query {metricsByName(name: "orders_total") {
name
dimensions {name}
valuesQuery(grain: [MONTH]) {... on OrdersTotal { value month}
}
}
}
"""
})
九、风险清单 + 收官判断
6 条风险
- License 历史坑 —— 0.140 之前是 AGPL(传染)、0.150-0.208 是 BSL(限商),必须锁 0.209+
- 必须装 dbt —— MetricFlow 不是 standalone,团队必须有 dbt 基础
- Python 性能 —— SQL 编译是 Python,部分场景比 Cube.js(Rust)慢
- OSI 还在早期 —— 规范 + 映射器都没稳定,2026 仍是观察期
- 学习曲线 —— Semantic Model + Entity + Dimension 概念需要团队培训
- dbt Cloud 锁定 —— 完整 GraphQL API + AI 集成只在 dbt Cloud(Enterprise+),自托管功能受限
3 条机会
- dbt 生态龙头 —— 9K stars + dbt Labs 商业支持,跟 dbt-core 强绑定
- OSI 标准票 —— 16 家创始成员之一,2026 标准之争占位
- AI Agent 友好 —— GraphQL API 直接对接 LangChain/AutoGen/CrewAI
飞熊读者速记三句话
- MetricFlow = dbt 的 ” 指标层扩展 ”,装 dbt 必须装 MetricFlow
- License 锁 0.209+,别再被 AGPL/BSL 坑了
- 跟 Cube.js 同层,选 MetricFlow 还是 Cube 看 dbt 依赖 + 前端需求
收官判断
MetricFlow 不是 ” 语义层 ” 的所有答案,但它是你 dbt 生态里 ” 指标不一致 ” 问题的唯一答案。
DPROD 管 L3 产品语义,MetricFlow 管 L2 指标计算,两者必须配合用。
OSI 是 L2 的标准联盟,MetricFlow 已经在桌上。
飞熊咨询资产盘点(语义层 + 数据治理)
- ✅ 语义层赛道 2 篇单点 :DPROD 368(OMG L3)+ 本文 MetricFlow 372(dbt L2)
- ✅ 语义层横评:4 层模型 370
- ✅ 数据治理 6+1+1 篇:DataHub 330 + OpenMetadata 366 + Marquez 360 + OpenLineage 358 + OL 实战 364 + DataGov 横评 352 + DPROD 368 + MetricFlow 372
- ✅ AI Agent 框架 6 篇:DSH 340 + Aiframe 342 + LangChain 344 + Vibe Coding 346 + Open Design 348 + Cordis 350
- ✅ BI 栈全景图 338(含语义层 4 层视图)
下一步建议
- 写 Cube.js 实战向:补 L2 双雄另一角(30 天内)
- 写 OSI 跟进文:2026 Q3 OSI 规范稳定后再发一篇
- 写 DPROD + MetricFlow + Cube.js 端到端实战:3 篇单点都出来后可以做实战篇
📎 参考资料
- dbt-labs/metricflow GitHub
- dbt Semantic Layer 官方文档
- PR #462 License 变更(AGPL→BSL)
- Snowflake OSI 官方公告
- dbt Labs 公司背景(Matt Turck 访谈)
- dbt Labs ARR $1 亿 +(Forbes 2024)
- 飞熊 BI 栈全景图 338
- 飞熊语义层四层模型 370
- 飞熊 DPROD 调研 368
- 飞熊 Cube.js 调研 282
- 飞熊 dbt-core 调研 290
- 业内横评:dbt MetricFlow/Cube/AtScale/LookML
✅ 已发布
| 维度 | 详情 |
|---|---|
| WP 文章 | 《MetricFlow 调研:dbt Labs 的语义层执行引擎》 |
| 封面 | yj_metricflow.png(D·v4 final 深色科技风) |
| WP POST ID | 372 |
| 封面 media ID | 371 |
| WP 总数 | 157 → 158 |
| 赛道 | 语义层 · 单点深挖第 2 篇 |
| 本地 md | metricflow- 调研.md |