MetricFlow 调研:dbt Labs 的语义层执行引擎 —— 让所有 BI 工具里的”营收”都是同一个数

47次阅读
MetricFlow 调研:dbt Labs 的语义层执行引擎 —— 让所有 BI 工具里的

副标题 :从 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
语义层厂商 Cubedbt 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 问题

  1. 我们现在装的 MetricFlow 是哪个版本? —— 检查 pip show dbt-metricflow 的 Version 字段
  2. 是否锁版本 ≥ 0.209.0? —— 锁 >=0.209.0 在 requirements.txt / pyproject.toml
  3. AGPL/BSL 版本有暴露风险吗? —— 自托管 SaaS 客户必须确认
  4. dbt Cloud 服务条款怎么覆盖 MetricFlow? —— dbt Cloud Starter/Enterprise 已经把 MetricFlow 包含
  5. 未来 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 个角色

  1. 语义模型标准参考实现 —— MetricFlow 输出的 YAML 格式是 OSI 的事实标准
  2. query API 贡献方 —— dbt Cloud 的 GraphQL API 是 OSI query API 的参考实现
  3. 跨工具映射 —— 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 条风险

  1. License 历史坑 —— 0.140 之前是 AGPL(传染)、0.150-0.208 是 BSL(限商),必须锁 0.209+
  2. 必须装 dbt —— MetricFlow 不是 standalone,团队必须有 dbt 基础
  3. Python 性能 —— SQL 编译是 Python,部分场景比 Cube.js(Rust)慢
  4. OSI 还在早期 —— 规范 + 映射器都没稳定,2026 仍是观察期
  5. 学习曲线 —— Semantic Model + Entity + Dimension 概念需要团队培训
  6. dbt Cloud 锁定 —— 完整 GraphQL API + AI 集成只在 dbt Cloud(Enterprise+),自托管功能受限

3 条机会

  1. dbt 生态龙头 —— 9K stars + dbt Labs 商业支持,跟 dbt-core 强绑定
  2. OSI 标准票 —— 16 家创始成员之一,2026 标准之争占位
  3. AI Agent 友好 —— GraphQL API 直接对接 LangChain/AutoGen/CrewAI

飞熊读者速记三句话

  1. MetricFlow = dbt 的 ” 指标层扩展 ”,装 dbt 必须装 MetricFlow
  2. License 锁 0.209+,别再被 AGPL/BSL 坑了
  3. 跟 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 层视图)

下一步建议

  1. 写 Cube.js 实战向:补 L2 双雄另一角(30 天内)
  2. 写 OSI 跟进文:2026 Q3 OSI 规范稳定后再发一篇
  3. 写 DPROD + MetricFlow + Cube.js 端到端实战:3 篇单点都出来后可以做实战篇

📎 参考资料

  1. dbt-labs/metricflow GitHub
  2. dbt Semantic Layer 官方文档
  3. PR #462 License 变更(AGPL→BSL)
  4. Snowflake OSI 官方公告
  5. dbt Labs 公司背景(Matt Turck 访谈)
  6. dbt Labs ARR $1 亿 +(Forbes 2024)
  7. 飞熊 BI 栈全景图 338
  8. 飞熊语义层四层模型 370
  9. 飞熊 DPROD 调研 368
  10. 飞熊 Cube.js 调研 282
  11. 飞熊 dbt-core 调研 290
  12. 业内横评: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
正文完