Great Expectations 5分钟上手:从安装到首次数据验证

Great Expectations 5分钟上手:从安装到首次数据验证

【免费下载链接】great_expectations Always know what to expect from your data. 【免费下载链接】great_expectations 项目地址: https://gitcode.com/GitHub_Trending/gr/great_expectations

引言:数据验证的痛点与解决方案

你是否曾因数据质量问题导致模型训练失败?还在手动编写冗长的检查脚本?Great Expectations(数据期望)作为开源数据验证框架,可让你用声明式语法定义数据规则,自动生成测试报告,5分钟内即可完成从安装到首次验证的全流程。

读完本文你将掌握:

  • 快速安装Great Expectations的3种方法
  • 初始化项目并创建数据上下文(Data Context)
  • 定义首个数据期望(Expectation)
  • 执行数据验证并解读可视化报告
  • 集成验证流程到现有工作流的最佳实践

1. 环境准备与安装(60秒)

1.1 系统要求

  • Python 3.8-3.11
  • pip 21.0+
  • 虚拟环境(推荐)

1.2 快速安装

# 创建并激活虚拟环境
python -m venv gx_env
source gx_env/bin/activate  # Linux/Mac
gx_env\Scripts\activate     # Windows

# 基础安装
pip install great-expectations

# 带常用数据源支持的完整安装
pip install "great-expectations[spark,sqlalchemy,pandas]"

⚠️ 注意:不同数据源需安装对应依赖,如PostgreSQL需额外安装psycopg2-binary,Snowflake需安装snowflake-connector-python

2. 初始化项目(90秒)

2.1 创建数据上下文

数据上下文(Data Context)是GX的核心对象,管理配置、期望套件和验证结果。通过以下代码初始化:

import great_expectations as gx
from great_expectations.data_context import FileDataContext

# 创建本地文件型数据上下文
context = FileDataContext.create(project_root_dir="./gx_project")

执行后将生成标准项目结构:

gx_project/
├── great_expectations.yml    # 主配置文件
├── expectations/             # 期望套件存储
├── validations/              # 验证结果存储
├── data_docs/                # 数据文档(自动生成)
└── checkpoints/              # 检查点配置

2.2 连接数据源

以CSV文件为例,注册数据源(Datasource):

# 定义数据源配置
datasource_config = {
    "name": "taxi_data",
    "class_name": "Datasource",
    "execution_engine": {
        "class_name": "PandasExecutionEngine"
    },
    "data_connectors": {
        "default_inferred_data_connector_name": {
            "class_name": "InferredAssetFilesystemDataConnector",
            "base_directory": "./data",  # 数据文件存放目录
            "default_regex": {
                "pattern": "(.*)\\.csv",
                "group_names": ["data_asset_name"]
            }
        }
    }
}

# 将数据源添加到上下文
context.add_datasource(**datasource_config)

3. 定义数据期望(120秒)

3.1 创建期望套件

期望套件(Expectation Suite)是数据规则的集合,可通过交互式方式创建:

# 加载数据资产(Data Asset)
batch_request = context.get_batch_request(
    datasource_name="taxi_data",
    data_connector_name="default_inferred_data_connector_name",
    data_asset_name="yellow_tripdata",  # CSV文件名(不含.csv)
)

# 创建新的期望套件
expectation_suite_name = "taxi_data_suite"
context.create_expectation_suite(
    expectation_suite_name=expectation_suite_name,
    overwrite_existing=True
)

# 启动交互式创建器
validator = context.get_validator(
    batch_request=batch_request,
    expectation_suite_name=expectation_suite_name
)

3.2 添加核心期望

通过Validator对象定义数据规则:

# 1. 检查列存在性
validator.expect_table_columns_to_match_ordered_list(
    column_list=["passenger_count", "trip_distance", "fare_amount"]
)

# 2. 数值范围验证
validator.expect_column_values_to_be_between(
    column="passenger_count",
    min_value=1,
    max_value=6,
    mostly=0.95  # 允许5%的异常值
)

# 3. 非空验证
validator.expect_column_values_to_not_be_null(
    column="fare_amount"
)

# 4. 数据类型检查
validator.expect_column_values_to_be_of_type(
    column="trip_distance",
    type_="float64"
)

# 保存期望套件
validator.save_expectation_suite(discard_failed_expectations=False)

常用期望类型对比表:

期望类型适用场景示例
expect_table_*表级验证行数检查、列名匹配
expect_column_*列级验证非空检查、类型验证
expect_column_pair_*列间关系价格>0且距离>0
expect_column_values_*值验证枚举检查、正则匹配

4. 执行数据验证(60秒)

4.1 创建检查点

检查点(Checkpoint)定义验证执行流程,支持多种触发方式:

checkpoint_config = {
    "name": "taxi_data_checkpoint",
    "config_version": 1.0,
    "class_name": "SimpleCheckpoint",
    "expectation_suite_name": expectation_suite_name,
    "batch_request": batch_request,
    "action_list": [
        {
            "name": "store_validation_result",
            "action": {"class_name": "StoreValidationResultAction"}
        },
        {
            "name": "update_data_docs",
            "action": {"class_name": "UpdateDataDocsAction"}
        }
    ]
}

context.add_checkpoint(**checkpoint_config)

4.2 运行验证

# 执行验证
result = context.run_checkpoint(checkpoint_name="taxi_data_checkpoint")

# 检查验证结果
if result["success"]:
    print("✅ 数据验证通过!")
else:
    print("❌ 数据验证失败,请查看报告。")

5. 查看验证报告(30秒)

5.1 生成数据文档

# 手动生成HTML报告
context.build_data_docs()

# 自动打开报告(需本地浏览器支持)
context.open_data_docs()

5.2 报告解读要点

生成的报告包含:

  • 总体通过率仪表盘
  • 每个期望的详细结果
  • 失败案例的采样数据
  • 数据统计信息与直方图

数据文档报告结构

⚠️ 注意:实际部署时可配置报告存储位置(S3/GCS/本地),并设置邮件/Slack通知。

6. 工作流集成与自动化

6.1 命令行执行

# 创建检查点配置文件
great_expectations checkpoint new taxi_checkpoint

# 运行检查点
great_expectations checkpoint run taxi_checkpoint

6.2 调度集成示例(Airflow)

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime

default_args = {
    "owner": "data_team",
    "start_date": datetime(2023, 1, 1)
}

with DAG(
    "taxi_data_validation",
    default_args=default_args,
    schedule_interval="@daily"
) as dag:
    
    validate_task = BashOperator(
        task_id="validate_taxi_data",
        bash_command="""
            source /path/to/gx_env/bin/activate &&
            cd /path/to/gx_project &&
            great_expectations checkpoint run taxi_data_checkpoint
        """
    )

7. 常见问题与解决方案

7.1 安装问题

错误解决方案
No module named 'great_expectations'确认虚拟环境激活,重新安装
ImportError: Pandas requires version...安装兼容版本:pip install pandas==1.5.3
Permission denied使用虚拟环境或--user标志

7.2 数据源连接

# PostgreSQL示例
datasource_config = {
    "name": "postgres_db",
    "class_name": "Datasource",
    "execution_engine": {
        "class_name": "SqlAlchemyExecutionEngine",
        "connection_string": "postgresql://user:password@host:port/dbname"
    },
    # ...
}

8. 总结与进阶

8.1 5分钟回顾

mermaid

8.2 进阶路径

  1. 期望自动生成:使用Profiler自动推断数据规则
  2. 数据契约:与上下游系统共享期望套件
  3. CI/CD集成:在PR阶段自动执行数据验证
  4. 自定义期望:开发业务特定的数据规则

8.3 资源推荐

  • 官方文档:docs.greatexpectations.io
  • GitHub仓库:https://gitcode.com/GitHub_Trending/gr/great_expectations
  • 社区支持:Slack频道 #great-expectations

如果你觉得本文有帮助,请点赞👍收藏🌟关注,下期将带来《Great Expectations高级特性:自定义期望开发指南》。

附录:完整代码示例

# 完整初始化脚本
import great_expectations as gx
from great_expectations.data_context import FileDataContext

# 1. 创建数据上下文
context = FileDataContext.create(project_root_dir="./gx_project")

# 2. 配置数据源
datasource_config = {
    "name": "taxi_data",
    "class_name": "Datasource",
    "execution_engine": {"class_name": "PandasExecutionEngine"},
    "data_connectors": {
        "default_inferred_data_connector_name": {
            "class_name": "InferredAssetFilesystemDataConnector",
            "base_directory": "./data",
            "default_regex": {"pattern": "(.*)\\.csv", "group_names": ["data_asset_name"]}
        }
    }
}
context.add_datasource(**datasource_config)

# 3. 创建期望套件
batch_request = context.get_batch_request(
    datasource_name="taxi_data",
    data_connector_name="default_inferred_data_connector_name",
    data_asset_name="yellow_tripdata"
)
context.create_expectation_suite("taxi_data_suite", overwrite_existing=True)
validator = context.get_validator(batch_request=batch_request, expectation_suite_name="taxi_data_suite")

# 4. 定义期望
validator.expect_table_columns_to_match_ordered_list(
    column_list=["passenger_count", "trip_distance", "fare_amount"]
)
validator.expect_column_values_to_be_between("passenger_count", 1, 6, mostly=0.95)
validator.save_expectation_suite()

# 5. 执行验证
context.add_checkpoint(
    name="taxi_checkpoint",
    config_version=1.0,
    class_name="SimpleCheckpoint",
    expectation_suite_name="taxi_data_suite",
    batch_request=batch_request
)
context.run_checkpoint(checkpoint_name="taxi_checkpoint")
context.build_data_docs()

【免费下载链接】great_expectations Always know what to expect from your data. 【免费下载链接】great_expectations 项目地址: https://gitcode.com/GitHub_Trending/gr/great_expectations

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值