Soda Core 调研:2.4K stars 的”现代数据栈 Data Contracts 引擎”,ELv2 许可比你想的细

36次阅读
Soda Core 调研:2.4K stars 的

一句话定位: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 检查工具升级到完整数据质量平台。

三把刀

  1. Data Contracts — 把 data testing 升级到生产者 / 消费者协议(v4 杀手锏)
  2. Data Testing + Observability 三合一 — YAML 配置 + 跨 pipeline 验证 + 生产监控
  3. 三层架构 — 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

正文完