Great Expectations 数据质量管理工具

Great Expectations (GE) 是一个用于数据验证、数据质量检查和数据管控的开源框架,它使用户能够定义、执行和自动化数据验证规则。通过 GE,用户可以确保数据符合预期,支持数据驱动的决策和流程。


一、概述

Great Expectations 是一个专注于数据质量管理的开源工具,旨在帮助数据工程师和数据科学家解决数据质量问题。它允许用户定义 "期望"(Expectations),即数据的规则和约束条件,然后对数据执行验证,生成直观的报告以识别问题。

  • 官方网站: https://greatexpectations.io
  • 用途:
    • 数据质量验证。
    • 数据清洗前的检查。
    • 数据管控和合规性验证。
  • 特性:
    • 自动化数据验证。
    • 支持多种数据源。
    • 生成直观的验证报告。
    • 与 CI/CD 工作流集成。

二、核心功能

Great Expectations 提供了强大的功能,支持从简单的数据验证到复杂的规则管理。

1. 期望 (Expectations)

  • 定义数据规则: 使用 GE 的 DSL(领域特定语言)定义数据规则。例如,字段值范围、唯一性、数据类型等。
  • 内置期望库: 提供 50 多种内置期望(如 expect_column_values_to_be_in_setexpect_table_row_count_to_be_between)。
  • 自定义期望: 用户可以根据需求编写自定义期望。

2. 数据验证 (Validation)

  • 批处理验证: 对指定数据集执行批量验证,检查规则是否符合。
  • 实时验证: 支持实时验证数据流。
  • 多数据源支持: GE 支持多种类型的数据源(文件、数据库、云存储等)。

3. 数据文档化

  • GE 生成交互式的 HTML 数据质量报告,包含验证结果和失败详情。
  • 报告适合作为数据管控和审核的依据。

4. 数据管道集成

  • GE 可以嵌入到数据管道中,在数据流转的每一步进行验证。
  • 支持与流行的数据编排工具集成,如 Apache Airflow、Prefect 和 Dagster。

5. 元数据存储 (Data Context)

  • GE 提供一个中心化的配置管理模块(Data Context),用于存储期望、验证结果和元数据。

6. 自动化规则生成

  • GE 提供自动化工具,通过扫描数据集生成初始期望模板,快速创建规则。

三、架构设计

Great Expectations 的架构设计分为以下几个核心模块:

1. Data Context

  • 描述: Data Context 是 GE 的核心配置模块,负责管理期望、数据源配置和验证结果。
  • 功能:
    • 数据源配置(如连接数据库、文件系统)。
    • 存储期望、验证结果和元数据。

2. Expectations

  • 描述: 用户可以通过 GE 的 DSL 定义期望。
  • 特点:
    • 通过 JSON 或 Python API 定义规则。
    • 自动生成初始规则模板,供用户编辑。

3. Validation

  • 描述: 验证模块执行期望规则,检查数据是否符合要求。
  • 特点:
    • 支持批量和流式数据验证。
    • 验证结果存储在 Data Context 中。

4. Validation Results

  • 描述: 验证结果以 JSON 格式存储,并可以生成 HTML 报告。
  • 特点:
    • 直观展示验证通过/失败的详情。
    • 支持审计和共享。

5. Checkpoints

  • 描述: Checkpoints 是 GE 的运行单元,用于在特定数据集上执行一组期望。
  • 功能:
    • 可通过命令行或脚本触发。
    • 支持调度和自动化运行。

6. Plugins 和扩展

  • 支持用户编写自定义插件。
  • 可扩展连接器(Connectors)以支持新的数据源类型。

四、安装部署

1. 安装

Great Expectations 是一个纯 Python 库,可以通过 pip 安装:

pip install great_expectations

2. 初始化项目

安装完成后,初始化 GE 项目结构:

great_expectations init

初始化后,目录结构如下:

great_expectations/
  ├── great_expectations.yml         # 配置文件
  ├── expectations/                  # 存储期望规则
  ├── checkpoints/                   # 存储 Checkpoints 配置
  ├── uncommitted/                   # 本地数据验证结果
  ├── validations/                   # 验证结果存储
  └── ...

3. 配置数据源

通过以下命令添加数据源:

great_expectations datasource new

支持的数据源包括:

  • 文件:CSV、Excel、Parquet 等。
  • 数据库:MySQL、PostgreSQL、Snowflake、BigQuery 等。
  • 云存储:AWS S3、Google Cloud Storage 等。

4. 部署

  • 本地运行: GE 可以直接在本地运行,适合开发和测试。
  • 生产环境: GE 可以与 CI/CD 管道集成,或作为数据管道的一部分运行。
  • 云环境: GE 可以部署在云环境中,执行数据验证任务。

五、使用案例

以下是 Great Expectations 的常见使用案例:

案例 1: 数据清洗前的质量检查

需求: 确保数据加载前没有缺失值或异常值。

实现:

  1. 定义期望规则:
    expect_column_values_to_not_be_null("column_name")
    expect_column_values_to_be_in_set("status", ["active", "inactive"])
    
  2. 执行验证,生成报告。

案例 2: 数据迁移验证

需求: 验证从旧系统迁移到新系统的数据是否一致。

实现:

  1. 定义期望规则(如行数一致、字段值范围一致)。
  2. 在迁移后运行 Checkpoint,验证数据一致性。

案例 3: 自动化数据管控

需求: 在数据管道中自动验证数据质量。

实现:

  1. 将 GE 集成到 Apache Airflow 或 Prefect 工作流中。
  2. 在每个 ETL 步骤后执行 Checkpoint,确保数据质量。

六、优缺点

优点

  1. 功能强大:

    • 丰富的内置期望,支持多种数据验证场景。
    • 自动化规则生成,快速上手。
  2. 多数据源支持:

    • 支持文件、数据库、云存储等多种数据源。
  3. 生成可视化报告:

    • 提供交互式 HTML 报告,便于共享和审计。
  4. 可扩展性高:

    • 支持自定义期望和插件扩展。
  5. 与现代工具集成:

    • 可嵌入到 Airflow、Prefect、Dagster 等数据编排工具中。
  6. 开源:

    • 免费使用,社区活跃,有丰富的文档和支持资源。

缺点

  1. 学习曲线较陡:

    • 初次使用时,需学习 GE 的 DSL 和配置方法。
  2. 性能问题:

    • 对于超大规模数据集,验证过程可能较慢,需要优化。
  3. 依赖配置:

    • GE 的配置文件较多,管理复杂性较高。
  4. 高级功能需要编程知识:

    • 自定义期望或深度集成需要一定的 Python 编程能力。

七、总结

Great Expectations 是一个功能强大的数据质量管理工具,非常适合需要对数据进行严格验证和管控的场景。它的期望机制、自动化功能和可视化报告使其成为数据工程和数据科学团队的重要工具。

适用场景

  • 数据清洗前的质量检查。
  • 数据管道中的自动化验证。
  • 数据迁移或集成项目的质量验证。
  • 数据治理和合规性检查。

不适用场景

  • 数据规模超大的实时流处理场景(性能可能受限)。
  • 简单数据验证场景(可能显得过于复杂)。

通过合理使用 Great Expectations,可以确保数据质量达到业务需求,为数据驱动的决策和分析提供坚实的基础。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容