3、数据质量监控技术选型:开源工具对比(Great Expectations、Deequ、Apache Griffin)、自研 vs 采购

说实话,技术选型这件事,我踩过的坑比走过的路还多。每次启动一个新项目,总有人问我:「咱们用哪个工具好?」我的回答永远是——先别急着选工具,先想清楚你要解决什么问题。

数据质量监控的选型,说白了就是三选一:开源工具、自研、采购商业产品。今天我就把这三种路子的优缺点掰开揉碎了讲清楚,顺便聊聊我这些年用过的几个主流开源工具。

3.1 三大开源工具横向对比

目前市面上最活跃的三个开源数据质量工具,分别是 Great ExpectationsDeequApache Griffin。我每个都用过,各有各的脾气。

维度 Great Expectations Deequ Apache Griffin
定位 数据质量框架 + 文档化 Spark 数据质量库 企业级数据质量平台
核心语言 Python Scala / Python Java / Spark
数据源支持 Pandas、Spark、SQL 数据库 Spark DataFrame Hive、Spark、Kafka
规则定义方式 Expectation(声明式) VerificationSuite(代码式) DSL + 配置文件
可视化 Data Docs(静态 HTML) 无(需自建) 内置 Dashboard
社区活跃度 极高 中等(AWS 维护) 较低
学习曲线 中等 低(Spark 用户友好)

3.1.1 Great Expectations:数据质量的「文档化」利器

我个人最喜欢 Great Expectations 的一点,是它把数据质量规则和文档绑在了一起。你写一条 Expectation,它自动生成一份漂亮的 Data Docs,业务方看了都说好。

举个例子,你想检查「订单金额不能为负数」:

import great_expectations as ge

df = ge.read_csv("orders.csv")
df.expect_column_values_to_be_between(
    column="amount",
    min_value=0,
    max_value=1000000
)

跑完之后,它会生成一个 HTML 报告,告诉你多少行通过了、多少行失败了。我在项目中遇到过最头疼的事,就是数据团队和业务团队对「什么是脏数据」理解不一致。有了这份文档化的报告,大家终于能在一个频道上说话了。

我的建议:如果你团队里 Python 工程师多,且需要频繁和业务方对齐数据质量标准,Great Expectations 是首选。它特别适合做「数据契约」。

3.1.2 Deequ:Spark 生态下的轻量级选手

Deequ 是 AWS 开源的,专门为 Spark 打造。它的核心思路是用 VerificationSuite 来定义检查规则,然后生成一个 DataQualityMetrics 结果。

我曾在一次实时数仓项目中用过 Deequ。当时数据量每天几十亿条,Great Expectations 跑起来太慢,Deequ 直接在 Spark 作业里嵌入检查,效率高得多。

import com.amazon.deequ.VerificationSuite
import com.amazon.deequ.checks.{Check, CheckLevel}

val verificationResult = VerificationSuite()
  .onData(df)
  .addCheck(
    Check(CheckLevel.Error, "订单数据质量检查")
      .isComplete("order_id")
      .isNonNegative("amount")
      .containsURL("description", _ == false))
  .run()

嗯,这里要注意——Deequ 没有自带的可视化界面。你得自己把结果写到数据库,再搭个 Dashboard。我当时用 Grafana 接了一下,效果还行,但确实多了一步。

避坑指南:我曾经在 Deequ 的约束条件里写了一个非常复杂的自定义检查,结果 Spark 作业直接 OOM 了。后来发现 Deequ 的某些检查会触发全表扫描,对内存消耗很大。建议先在小数据集上验证规则,再上生产。

3.1.3 Apache Griffin:企业级但有点「重」

Apache Griffin 是三者中唯一一个自带完整平台(包括 UI、调度、告警)的。它支持批处理和流处理,理论上很适合大型企业。

但说实话,我用 Griffin 的经历并不愉快。它的部署太复杂了——需要依赖 Hadoop、Spark、Elasticsearch、MySQL 一堆组件。我花了两周才搭好一个测试环境,结果发现它的规则表达能力有限,很多自定义逻辑写起来很别扭。

如果你公司已经有成熟的 Hadoop 集群,且团队有专职的大数据运维人员,Griffin 可以考虑。否则,我建议你慎重。

3.2 自研 vs 采购:什么时候该自己造轮子?

这个问题我经常被问到。我的回答是:看你的核心需求是否被现有工具覆盖

3.2.1 自研的适用场景

  • 数据源极其特殊:比如你们用了一些非主流的存储系统,开源工具不支持。
  • 规则逻辑非常复杂:需要跨表、跨系统、甚至跨业务域做关联校验。
  • 对性能要求极高:开源工具在超大规模数据下可能成为瓶颈。
  • 团队有足够的人力:至少 2-3 个全职工程师维护。

我曾经在一个金融项目中自研过一套数据质量监控系统。原因很简单——监管要求每笔交易都要做 20 多项校验,而且校验规则每周都在变。用开源工具改规则太慢了,自研反而更灵活。

3.2.2 采购商业产品的适用场景

  • 团队没有专职数据质量工程师:买现成的,开箱即用。
  • 需要完善的告警和运维能力:商业产品通常自带告警、SLA 管理、工单系统。
  • 合规要求严格:有些行业要求数据质量工具必须通过某些认证。

但采购也有坑。我记得有个朋友公司买了某大厂的平台,结果发现它只支持自家云服务的数据源,想对接自建 Hive 集群还得额外付费。所以采购前一定要做 POC(概念验证),别光看 PPT。

3.3 我的选型决策框架

你想想看,选型其实就三个问题:

  1. 你们的数据栈是什么?——Python 多就选 Great Expectations,Spark 多就选 Deequ。
  2. 你们需要可视化吗?——需要就选 Griffin 或 Great Expectations,不需要就 Deequ。
  3. 你们有多少人维护?——人少就买商业产品,人多就自研或开源。

下面这张图是我自己总结的选型流程,你可以参考一下:

开始选型 数据栈是什么? Python Great Expectations Spark Deequ 需要可视化吗? Griffin / 商业 Deequ / 自研 确定方案
核心结论:没有银弹。Great Expectations 适合 Python 生态 + 文档化需求,Deequ 适合 Spark 生态 + 高性能场景,Griffin 适合已有 Hadoop 集群的大企业。自研和采购则取决于团队规模和业务复杂度。

最后说一句——不管你选哪个工具,先跑通一个最小闭环。我见过太多团队花三个月搭平台,结果连一条最简单的「非空检查」都没跑通。从一个小表、一条规则开始,逐步扩展,这才是正道。


公众号:蓝海资料掘金营,微信deep3321