Great Expectations数据质量与数据湖:原始数据验证

Great Expectations数据质量与数据湖:原始数据验证

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

数据湖原始数据的质量痛点与解决方案

你是否还在为数据湖中杂乱无章的原始数据头疼?当数据从千差万别的源头流入数据湖(Data Lake),缺失值、格式错误、 schema 漂移等问题可能导致下游分析结果失真,甚至引发业务决策失误。根据 Gartner 2024 年报告,60% 的数据湖项目因数据质量问题未能实现预期价值。Great Expectations(GX) 作为开源数据质量工具,通过自动化数据验证(Data Validation)为数据湖构建第一道防线。本文将系统讲解如何利用 GX 对 S3、Azure Blob 等数据湖存储的原始数据进行验证,确保数据从接入阶段就符合预期。

读完本文你将掌握:

  • 数据湖原始数据的 5 大质量风险及对应 GX 验证策略
  • 基于 GX 的数据湖验证架构与工作流设计
  • S3/Azure Blob 数据源配置与批量数据验证实现
  • 10+ 高频原始数据 Expectation 示例(含正则匹配、类型检查等)
  • 数据验证报告与 CI/CD 集成最佳实践

数据湖原始数据质量风险与 GX 应对策略

原始数据五大质量风险

风险类型典型场景影响程度GX 验证手段
缺失值用户行为日志缺少 user_idexpect_column_values_to_not_be_null
格式错误日期字段混入非 ISO 格式字符串expect_column_values_to_match_regex
数据类型异常价格字段出现字符串类型expect_column_values_to_be_of_type
数据量异常日活数据量突降 90%expect_table_row_count_to_be_between
Schema 漂移JSON 日志新增未声明字段expect_table_columns_to_match_ordered_list

GX 数据湖验证工作流

mermaid

环境准备与数据源配置

安装与初始化

# 克隆仓库
git clone https://gitcode.com/GitHub_Trending/gr/great_expectations.git
cd great_expectations

# 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 安装依赖
pip install -r requirements.txt
pip install boto3 azure-storage-blob  # 数据湖依赖

# 初始化 GX 项目
great_expectations init

S3 数据源配置(great_expectations.yml

datasources:
  pandas_s3_datasource:
    type: pandas_s3
    bucket: my-raw-data-bucket
    boto3_options:
      aws_access_key_id: ${AWS_ACCESS_KEY_ID}
      aws_secret_access_key: ${AWS_SECRET_ACCESS_KEY}
      region_name: cn-northwest-1
    assets:
      user_logs:
        type: csv
        batching_regex: .*user_events_(\d{8})\.csv

Azure Blob 数据源配置

from great_expectations.datasource.fluent.pandas_azure_blob_storage_datasource import PandasAzureBlobStorageDatasource

datasource = context.sources.add_or_update_pandas_azure_blob_storage(
    name="azure_datasource",
    account_name="myazureaccount",
    container="raw-data",
    sas_token="${AZURE_SAS_TOKEN}"
)

# 添加数据资产
datasource.add_csv_asset(
    name="product_catalog",
    prefix="products/",
    delimiter="/",
    recursive_file_discovery=True
)

核心 Expectation 实战示例

1. 基础完整性验证

场景:确保用户日志的 user_idevent_time 字段无缺失,且 event_time 符合 ISO 格式。

from great_expectations.expectations.core import ExpectColumnValuesToNotBeNull, ExpectColumnValuesToMatchRegex

# 创建 Expectation Suite
suite = context.add_expectation_suite("user_logs_suite")

# 添加验证规则
suite.add_expectation(
    ExpectColumnValuesToNotBeNull(
        column="user_id"
    )
)

suite.add_expectation(
    ExpectColumnValuesToMatchRegex(
        column="event_time",
        regex=r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$"  # ISO 8601 格式
    )
)

2. 数据类型与范围验证

场景:验证订单数据中 price 为数值类型且大于 0,quantity 为整数。

suite.add_expectation(
    ExpectColumnValuesToBeOfType(
        column="price",
        type_="float64"
    )
)

suite.add_expectation(
    ExpectColumnValuesToBeBetween(
        column="price",
        min_value=0.01,
        max_value=None
    )
)

suite.add_expectation(
    ExpectColumnValuesToBeInTypeList(
        column="quantity",
        type_list=["int64", "Int64"]  # 支持 pandas  nullable integer
    )
)

3. 文件命名规范验证

场景:确保 S3 中的 CSV 文件符合 {table}_{YYYYMMDD}.csv 命名规范。

from great_expectations.expectations.core import ExpectFileNameToMatchRegex

suite.add_expectation(
    ExpectFileNameToMatchRegex(
        regex=r"^[a-z_]+_\d{8}\.csv$",
        regex_group_names=["table_name", "date"]
    )
)

批量验证与报告生成

创建 Checkpoint 配置(checkpoints/user_logs_checkpoint.yml

name: user_logs_checkpoint
config_version: 1.0
class_name: Checkpoint
run_name_template: "%Y%m%d-%H%M%S-user-logs-validation"
validations:
  - batch_request:
      datasource_name: pandas_s3_datasource
      data_asset_name: user_logs
      batch_slice:
        end: 10000  # 验证前 10000 行
    expectation_suite_name: user_logs_suite
action_list:
  - name: store_validation_result
    action:
      class_name: StoreValidationResultAction
  - name: update_data_docs
    action:
      class_name: UpdateDataDocsAction

执行验证与查看报告

# 运行 Checkpoint
great_expectations checkpoint run user_logs_checkpoint

# 打开 Data Docs
great_expectations docs open

Data Docs 报告示例

  • 验证成功率:98.7%
  • 失败项:3 条 event_time 格式错误,2 条 price 为负数
  • 详细日志:uncommitted/data_docs/local_site/index.html

高级应用:数据湖验证 CI/CD 集成

GitHub Actions 配置(.github/workflows/data_validation.yml

name: 数据湖原始数据验证
on:
  schedule:
    - cron: '0 1 * * *'  # 每日凌晨 1 点执行
  workflow_dispatch:  # 手动触发

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 设置 Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.9"
      - name: 安装依赖
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
          pip install boto3
      - name: 配置 AWS 凭证
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: cn-northwest-1
      - name: 执行 GX 验证
        run: great_expectations checkpoint run user_logs_checkpoint
      - name: 上传报告
        uses: actions/upload-artifact@v3
        with:
          name: data-docs
          path: uncommitted/data_docs/

常见问题与性能优化

1. 大规模数据验证策略

  • 抽样验证:通过 batch_slice 验证部分数据(如前 10%)
  • 分区验证:按时间分区(如每日数据)增量验证
  • 并行执行:配置 Spark 数据源利用分布式计算
# 抽样验证示例
batch_request = {
    "datasource_name": "spark_s3_datasource",
    "data_asset_name": "large_dataset",
    "batch_slice": {
        "sampling_method": "random",
        "sampling_kwargs": {"frac": 0.1}  # 随机抽取 10%
    }
}

2. 敏感数据处理

  • 使用 config_variables.yml 存储凭证,避免硬编码
  • 验证报告脱敏:过滤手机号、身份证号等字段
# config_variables.yml
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}

3. 数据湖特定问题处理

问题解决方案
文件路径嵌套过深使用 recursive_file_discovery: true
小文件数量过多合并文件后验证(如 Spark coalesce(1))
跨区域访问延迟配置 boto3_options 中的 region_name

总结与展望

本文详细介绍了如何基于 Great Expectations 构建数据湖原始数据验证体系,包括:

  1. 数据湖质量风险分析与 GX 应对策略
  2. S3/Azure 数据源配置与环境搭建
  3. 10+ 核心 Expectation 实战示例
  4. 批量验证与 CI/CD 集成方案

后续演进方向

  • 结合数据血缘工具(如 Apache Atlas)实现端到端质量追踪
  • 利用 GX Profiler 自动生成 Expectation 规则
  • 构建数据质量评分卡,量化数据健康度

通过 GX 的原始数据验证,可将数据质量问题拦截在数据湖入口,为下游数据仓库、BI 报表和机器学习模型提供可靠的数据基础。立即开始你的数据质量之旅吧!

收藏本文,关注作者获取《Great Expectations 高级特性:自定义 Expectation 开发》下一期内容!

【免费下载链接】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、付费专栏及课程。

余额充值