
一句话定位:Soda Core = Data Contracts + Data Testing + Data Observability 三合一的 Python 引擎 。它不是 BI 工具,而是BI 上游的 ” 数据可信度 ” 基础设施——跟 Superset (270) / Metabase (274) / Lightdash (272) 形成完整现代数据栈闭环。本文特别拆解它那个 不太常见的 Elastic License 2.0 (ELv2),技术决策者最容易踩坑。
一、为什么这次调研它
之前的三篇 BI 横评(Superset 270 / Lightdash 272 / Metabase 274)讲的是 ” 数据 展示 给谁看 ”。但一个更深层的问题悬在所有 BI 工具之上:
数据本身可信吗? BI dashboard 上 100 万营收、5K DAU——你怎么知道这些数对?
这就是 Data Quality(数据质量)/ Data Contracts(数据契约)/ Data Observability(数据可观测性) 赛道。三件事看似不同但紧密相关:
| 维度 | 关注点 | 关键问题 |
|---|---|---|
| Data Testing | 预防 | 上线前:schema 对不对?值域是否合法?行数是否合理? |
| Data Observability | 发现 | 上线后:freshness 准吗?历史趋势有没异常?schema 漂移了吗? |
| Data Contracts | 治理 | 生产者和消费者达成 SLA 协议,谁负责、什么指标、违规了怎么办 |
Soda Core 是这个赛道里 唯一一个 ” 三合一 ” 的开源产品:
- Great Expectations (262):Data Testing 老牌选手,但 Observability 弱
- Monte Carlo / Bigeye / Soda Cloud:商业 Data Observability,Soda 的商业版
- dbt tests:轻量,但只覆盖 Testing 没覆盖 Observability
- Datafold / Prequel:diff 工具,不算完整 DQ 平台
Soda 在开源里最特殊的是:它有一个 v4 大重构,把 ”CLI 检查工具 ” 升级成 ” 完整数据质量平台 ”。本文拆给你看。
二、项目基本面
| 维度 | 数据 |
|---|---|
| 仓库 | sodadata/soda-core |
| Stars / Forks | 2,404 ⭐ / 282 🍴 |
| Open issues | 203 |
| License | Elastic License 2.0 (ELv2) ⚠️(不是 Apache / MIT / AGPL) |
| 首次 commit | 2020-12-14(5.5 年历史) |
| 最近 commit | 2026-08-04(持续高频更新) |
| 仓库大小 | 8.4 MB(非常小,纯 Python 包) |
| 主语言 | Python(3.9–3.12,3.13 兼容) |
| Topics | data-contracts data-quality data-observability data-governance dbt snowflake 等 20 个 |
| 公司主体 | Soda Data NV(比利时公司) |
| 官网 | https://soda.io |
| 文档 | https://docs.soda.io |
| 商业版 | Soda Cloud + Soda Runner(managed observability) |
对比维度:
– 比 BI 工具小很多(Superset 74K / Metabase 48K / Lightdash 6K)
– 但
领域龙头:Great Expectations 4.5K stars / Soda 2.4K stars(v4 重构后增速明显)
– 跟 Great Expectations 同赛道,但
ELv2 vs Apache-2.0 许可差异极大
三、License 深度拆解(飞熊最该看的)
Soda Core 用的是 Elastic License 2.0 (ELv2)——这是飞熊之前几篇调研里没碰到过的 ” 第三类许可 ”,必须单独讲。
3.1 ELv2 的核心限制
ELv2 原文(License 文件第一条):
You may not provide the software to third parties as a hosted or managed service, where the service provides users with access to any substantial set of the features or functionality of the software.
翻译:
– ✅ 你可以自由使用、修改、分发、二开(
源码可见)
– ✅ 你可以拿它做内部数据质量系统
– ❌
你不能拿它提供托管服务 / SaaS(”hosted or managed service”)
– ❌ 不能移除版权声明
跟其他许可对比:
| License | 商用友好度 | 做 SaaS 风险 | 代表项目 |
|---|---|---|---|
| MIT | ✅ 无限制 | 无 | Lightdash 主体 |
| Apache-2.0 | ✅ 无限制 | 无 | Apache Superset (270) |
| AGPL | ⚠️ 自用 OK,做 SaaS 必须开源 | ⚠️ 高(必须开源你的应用) | Metabase 274 |
| ELv2 | ⚠️ 自用 OK,做 SaaS 禁止 | ❌ 禁止(连开源都不行) | Soda Core 本文 |
| SSPL | ❌ 自用 OK,做 SaaS 必须开源 | ❌ 高 | MongoDB / ElasticSearch |
| BSL / BUSL | ⚠️ 几年后转开源 | ⚠️ | MariaDB / Sentry |
3.2 飞熊视角判断
ELv2 的 ” 中间地带 ” 比 AGPL 严、比 SSPL 宽:
– 比 AGPL 严:
禁止 用 Soda Core 做托管服务(AGPL 只要求开源你的衍生作品)
– 比 SSPL 宽:SSPL 要求开源整个应用栈(数据库 + 周边),ELv2 只针对 Soda 本身
结论:
– 公司内部数据质量 →
ELv2 OK
– 想做 ” 数据质量 SaaS” →
不行,要么自己买 Soda Cloud,要么用 Great Expectations (Apache-2.0)
– 想二开 / fork →
可以,但 fork 出去做 SaaS 同样禁止
对比 Great Expectations (262):
– GE 是
Apache-2.0(完全无限制,包括做 SaaS)
–
如果你的场景是 ” 做数据质量 SaaS 给客户用 ” → GE 是唯一选择
– 如果只是公司内部用 → Soda / GE 都可以
四、Soda v4 大重构(这次调研的核心)
Soda 在 2025–2026 年完成了 从 v3 到 v4 的完全重构——这不是普通版本升级,是产品定位的根本变化。
4.1 v3 是什么 → v4 是什么
| 维度 | Soda v3(2020-2024) | Soda v4(2025-2026 重构) |
|---|---|---|
| 定位 | CLI 检查工具 | 完整数据质量平台 |
| 核心 | soda scan 跑 YAML checks |
Data Contracts 引擎 + 完整可观测性 |
| 架构 | 单体库 | Core + Runner + Cloud 三层 |
| CLI | soda-core-* (per-datasource) |
soda-{datasource} 简洁包名 |
| Data Contracts | 没有(一等概念) | ✅ 原生(YAML + publish 到 Cloud) |
| Data Observability | 仅 Soda Cloud | ✅ 完整(Soda Runner) |
| Data Testing | ✅ | ✅ + Data Studio 化 |
4.2 三层架构(Core + Runner + Cloud)
┌─────────────────────────────────────────────────────────┐
│ Soda Cloud(商业 SaaS / 协作 UI)│
│ - Web UI 看监控 / contracts │
│ - Anomaly detection │
│ - 团队协作 │
└─────────────────┬───────────────────────────────────────┘
│ (通过 Soda Runner 通信)
┌─────────────────▼───────────────────────────────────────┐
│ Soda Runner(部署在你环境里的 agent)│
│ - 跑 schedules │
│ - 跟 Soda Cloud 通信 │
│ - 支持 observability + scheduling │
└─────────────────┬───────────────────────────────────────┘
│
┌─────────────────▼───────────────────────────────────────┐
│ Soda Core(开源 Python 库 + CLI)│
│ - `soda-{datasource}` 独立 pip 包 │
│ - 跑 contract verification │
│ - 嵌入到你的 pipeline │
│ - 无 observability │
└─────────────────────────────────────────────────────────┘
核心 insight:
–
Core 完全开源(ELv2)→ 你可以无限制嵌入到自己的 pipeline / dbt / Airflow
–
Runner 是中间层 → 自托管 runner 是核心差异化(不用必须用 Cloud)
–
Cloud 是商业化主战场 → 协作 UI + anomaly detection
4.3 v4 安装(极简)
# v4 包名简洁(v3 是 soda-core-postgres)uv pip install soda-postgres
# 或 pip
pip install soda-postgres
# 替换 postgres 为:snowflake / bigquery / databricks / duckdb / spark / redshift 等
支持的 data sources(v4 官方包):
–
Warehouse:PostgreSQL / Snowflake / BigQuery / Databricks / DuckDB / Redshift / Trino 等
–
In-memory:Spark / DataFrame(v4 新增,v3 没有)
五、核心能力:Data Contracts(飞熊最该看)
这是 v4 的 ” 杀手锏 ”——把 data testing 升级到 data contracts,建立 ” 生产者 / 消费者协议 ”。
5.1 一个 contract.yml 长这样
# contract.yml
dataset: postgres_ds/db/schema/dataset
checks: # dataset 级检查
- schema:
- row_count:
columns: # columns 块
- name: id
checks:
- missing:
- duplicate:
- name: name
checks:
- missing:
threshold:
metric: percent
must_be_less_than: 10
- name: size
checks:
- invalid:
valid_values: ['S', 'M', 'L']
跟 dbt tests 的区别:
– dbt tests =
“ 这个 model 的 SQL 跑出来应该 X”(轻量,局限在 dbt 内部)
– Soda contract =
“ 这个 dataset 上线后消费者看到的应该 X”(跨 dbt / 非 dbt / 跨团队)
5.2 三种部署模型
| 模型 | 适用 | 能力 |
|---|---|---|
| Soda Core | 自定义 pipeline 集成 | 无 observability / 支持 in-memory |
| Soda-hosted Runner | 不想运维 runner | 集中 datasource / 有 observability |
| Self-hosted Runner | 企业合规 | 自己跑 runner / 有 observability / 跟 Soda Cloud 通信 |
5.3 三种工作流
# 1. 本地开发
soda data-source create -f ds_config.yml
soda contract verify -ds ds_config.yml -c contract.yml
# 2. 接 Soda Cloud
soda cloud create -f sc_config.yml
soda contract publish -c contract.yml -sc sc_config.yml
soda contract verify -ds ds_config.yml -c contract.yml -sc sc_config.yml -p
# 3. 远程(via Soda Runner)soda contract verify -sc sc_config.yml -d postgres_ds/db/schema/dataset -r
5.4 跟其他 DQ 工具的关键差异
| 工具 | 核心定位 | 许可 | AI / ML | Observability |
|---|---|---|---|---|
| Soda Core v4 | Data Contracts 引擎 | ELv2 | ✅(Cloud) | ✅(Runner) |
| Great Expectations | Data Testing 老牌 | Apache-2.0 | ⚠️(GE Cloud) | ⚠️(部分) |
| dbt tests | Lightweight Testing | Apache-2.0 | ❌ | ❌ |
| Monte Carlo | Data Observability 商业 | 闭源 | ✅✅(最强) | ✅✅ |
| Bigeye | Data Observability 商业 | 闭源 | ✅ | ✅ |
六、技术栈
┌────────────────────────────────────────┐
│ Soda Core(开源 Python 库)│
│ - Click(CLI 框架)│
│ - Pydantic(配置 schema)│
│ - SQLAlchemy / 适配器(datasource)│
├────────────────────────────────────────┤
│ Storage │
│ - 无 metadata 库(Core 只跑检查)│
│ - Runner 用 Postgres 存 checks │
├────────────────────────────────────────┤
│ Runner │
│ - Python 进程,跑 schedule │
│ - 跟 Soda Cloud 通信 │
├────────────────────────────────────────┤
│ Cloud │
│ - SaaS(不在你环境)│
│ - React UI + Python 后端 │
│ - Anomaly detection(ML)│
└────────────────────────────────────────┘
关键 insight:
– Soda Core
不存元数据——这是为了 ELv2 之下的可嵌入性
– Runner 才存(自托管 runner 用 Postgres)
– 跟 dbt 的关系:
不是取代,是互补——Soda 处理 dbt 之后的下游 dataset(数据仓库层)
七、实战路径(飞熊视角)
7.1 快速试(10 分钟)
# 1. 装 core(v4 简洁包名)uv pip install soda-postgres
# 2. 配 datasource
soda data-source create -f ds_config.yml
# 填 Postgres connection
soda data-source test -ds ds_config.yml
# 3. 写 contract
vim contract.yml # 见 5.1 例子
# 4. 验证
soda contract verify -ds ds_config.yml -c contract.yml
7.2 嵌入到 Airflow / Dagster
# Airflow DAG 里
from soda.scan import Scan
def check_orders():
scan = Scan()
scan.add_pyspark_df(...) # 或 add_datasource
scan.add_sodacl_yaml_file("contract.yml")
scan.execute()
assert scan.has_error_checks() is False, scan.get_errors_text()
7.3 接 Soda Cloud
# 拿 free account(最多 3 个 dataset)https://soda.io/request-free/
# 配置 + publish
soda cloud create -f sc_config.yml
soda contract publish -c contract.yml -sc sc_config.yml
# 部署 runner(用 Docker)docker run -d sodaio/runner
7.4 跟 dbt 集成
# Soda 不是取代 dbt,而是 dbt 之后的下游检查
# dbt 跑完 model → Soda 检查 dataset → 触发告警
dbt run
soda contract verify -ds ds_config.yml -c contract.yml
八、对比:Soda vs Great Expectations (262) vs dbt tests
飞熊之前已经调研过 Great Expectations (262),这里做深度对比:
| 维度 | Soda Core v4 | Great Expectations | dbt tests |
|---|---|---|---|
| Stars | 2,404 | ~4,500 | n/a(dbt 12K) |
| License | ELv2 ⚠️ | Apache-2.0 ✅ | Apache-2.0 ✅ |
| 首次 commit | 2020-12 | 2018 | 2016 |
| 主语言 | Python | Python | Python / SQL |
| 核心定位 | Data Contracts 引擎 | Data Testing 老牌 | Lightweight Testing |
| YAML 配置 | ✅ 简洁 | ✅(更复杂) | ✅(schema.yml) |
| Observability | ✅(Runner + Cloud) | ⚠️(GE Cloud) | ❌ |
| Anomaly Detection | ✅(Cloud ML) | ⚠️(有限) | ❌ |
| dbt 集成 | ✅(下游) | ✅(上游 + 下游) | ✅(原生) |
| 社区 / 生态 | 中 | 最大(最早) | 最大(dbt 生态) |
| 商用风险 | ⚠️ ELv2 | ✅ Apache 无风险 | ✅ Apache 无风险 |
| 公司 | Soda Data NV | Superconductive Inc(GE Cloud) | dbt Labs |
核心判断:
| 场景 | 首选 |
|---|---|
| 公司内部数据质量 + 想用 Observability + 商用 OK | Soda Core v4 |
| 做数据质量 SaaS + 必须 Apache-2.0 | Great Expectations |
| dbt 重度 + 只想要轻量测试 | dbt tests |
| 大规模 + 强 observability + 预算充足 | Monte Carlo / Soda Cloud |
飞熊视角:
– 客户画像是 ” 现代数据栈 + AI native + 内部用 ” →
Soda Core v4 首选
– 客户画像是 ” 做 SaaS 产品想用开源 DQ” →
Great Expectations(Apache-2.0 无坑)
– 客户画像是 ”dbt 重度 + 轻量场景 ” →
dbt tests
九、风险清单(飞熊视角)
⚠️ Soda Core 看起来很香,但有 5 个真实风险:
9.1 ⚠️ ELv2 商用陷阱(最关键)
- 公司内部用 → OK
- 做 SaaS 给客户用 → 禁止(ELv2 原文)
- 想二开 + fork + 自托管 + 卖服务 → 禁止
- 跟 Great Expectations (Apache-2.0) 比 → 商用风险更高
- 跟 Superset (Apache-2.0) 比 → 商用风险更高
- 跟 Lightdash (MIT) 比 → 商用风险更高
飞熊判断:
– 内部数据质量 → Soda 没问题
– 商用 SaaS →
必须选 Apache-2.0 的 Great Expectations
9.2 v4 重构的稳定性风险
- v4 是 2025–2026 年才完全重构
- 跟 v3 不兼容(包名变了 / CLI 变了 / 数据结构变了)
- 如果你已经在用 v3,必须看 migration guide 迁移
- v4 文档还在完善(本文调研时 docs.soda.io 还有 404 页)
9.3 Observability 必须依赖 Runner / Cloud
- Soda Core 本身没有 observability
- 想要 anomaly detection / 趋势监控 → 必须装 Runner 或接 Soda Cloud
- Core 只是 contract verification 引擎,不是完整平台
- 别被 ” 开源 ” 误导——完整能力还是要商业版
9.4 5.5 年历史但 stars 相对少
- 2,404 stars 跟 Great Expectations (4.5K) 比还有差距
- v4 重构后增速在恢复,但 社区认知度不如 GE
- 新项目评估时,社区规模是技术决策重要指标
9.5 Soda Cloud 是主战场
- 公司业务核心是 Soda Cloud(商业 SaaS)
- 开源 Core 主要是 ” 客户引入 + 跟 dbt 集成 ”
- 风险:如果 Cloud 营收不达预期,公司可能收紧开源路线
- 跟 GE 不同:GE 的开源 + 商业是两条独立线
9.6 Warehouse 适配器覆盖
- v4 适配器在快速补齐
- 一些边缘 data source(如 ClickHouse / Doris / StarRocks)可能还不完善
- 用前查 data source reference
十、Soda Core 适合谁 / 不适合谁
✅ 适合
- 现代数据栈团队(dbt + Snowflake / BigQuery / Databricks)
- 想要 Data Contracts 概念(生产者 / 消费者协议)
- 想要 YAML + CLI 简洁配置(不像 GE 那么复杂)
- 公司内部用,不打算做 SaaS
- 愿意用 Soda Runner / Cloud 做 observability
- 接受 ELv2 商用条款
❌ 不适合
- 做数据质量 SaaS / 卖服务给客户 → ELv2 禁止(用 GE)
- 想用 Apache-2.0 商用友好项目 → GE
- dbt 重度 + 只想要轻量测试 → dbt tests 足够
- 强 Observability + 大预算 + 不在乎开源 → Monte Carlo / Bigeye
- 刚接触 DQ 领域 → 从 dbt tests 入手更简单
- ClickHouse / Doris / StarRocks 等非主流仓库 → 适配器可能不全
十一、总结
Soda Core v4 是 现代数据栈 ” 数据可信度 ” 赛道的代表性产品——从 CLI 检查工具升级到完整数据质量平台。
三把刀
- Data Contracts — 把 data testing 升级到生产者 / 消费者协议(v4 杀手锏)
- Data Testing + Observability 三合一 — YAML 配置 + 跨 pipeline 验证 + 生产监控
- 三层架构 — Core 开源 + Runner 自托管 + Cloud 商业化
核心风险
- ⚠️ ELv2 商用陷阱(做 SaaS 禁止,跟 GE 的 Apache-2.0 形成鲜明对比)
- ⚠️ v4 重构稳定性(v3 → v4 不兼容)
- ⚠️ Core 没有 observability(必须 Runner / Cloud)
给飞熊的判断
- 公司内部数据质量 → Soda Core v4 首选(Data Contracts 概念领先)
- 做数据质量 SaaS → 必须 Great Expectations (262)(Apache-2.0 无坑)
- dbt 重度 + 轻量 → dbt tests(已经够用)
- 大预算 + 强 Observability → Monte Carlo / Soda Cloud
Soda Core 不是 BI 工具的替代品,是 BI 上游的 ” 数据可信度 ” 基础设施。跟 Superset (270) / Metabase (274) / Lightdash (272) 形成完整现代数据栈闭环:
Source (DB / API / Event)
↓
ETL / ELT (dbt / Airflow / Dagster)
↓
[Soda Core / GE] ← 数据质量检查
↓
Warehouse (Snowflake / BigQuery / Postgres)
↓
BI / AI 应用
[Superset 270 / Metabase 274 / Lightdash 272 / 你的 AI Agent]
数据可信了,BI 才可信,AI 才可信——这就是 Soda Core 在飞熊叙事里的价值位置。
参考
- 仓库:https://github.com/sodadata/soda-core
- 官网:https://soda.io
- 文档:https://docs.soda.io
- v4 vs v3 迁移:https://docs.soda.io/reference/migrate-from-v3-to-v4.md
- Data source reference:https://docs.soda.io/soda-v4/reference/data-source-reference-for-soda-core
- Contract language reference:https://docs.soda.io/soda-v4/reference/contract-language-reference
- License 文件:https://github.com/sodadata/soda-core/blob/main/LICENSE
- Slack 社区:https://soda-community.slack.com/join/shared_invite/zt-3epazj3kw-00z15nnW4KEt4j_vk8lbdQ
- 对比文:Great Expectations 262(east196.cn/?p=262)
- 上游 BI 横评:Apache Superset 270 / Lightdash 272 / Metabase 274
作者:飞熊 · 增长运营官代调研 · 2026-08-05