公众号:雨中散步撒哈拉
个人博客网站:https://liudongdong.top
个人导航网站:https://1024dh.top
编辑者:雨中散步撒哈拉

资源获取
关注公众号: 雨中散步撒哈拉
回复关键词: 离线数仓4.0

一、数据质量管理概述

1. 数据质量管理定义

数据质量管理(Data Quality Management),是指对数据从计划、获取、存储、共享、维护、应用、消亡生命周期的每个阶段里可能引发的各类数据质量问题,进行识别、度量、监控、预警等一系列管理活动,并通过改善和提高组织的管理水平使得数据质量获得进一步提高。
数据质量管理是循环管理过程,其终极目标是通过可靠的数据提升数据在使用中的价值,并最终为企业赢得经济效益。

2. 数据质量评价指标

数据质量管理的最终目标是改善,任何改善都是建立在评价的基础上。通常数据质量的评价标准包括以下内容。
image.png

二、数据质量管理环境准备

1. 需求分析

我们的数仓项目主要监控以下数据的指标:
ODS层数据量,每日环比和每周同比变化不能超过一定范围
DIM层不能出现id空值,重复值;
DWD层不能出现id空值,重复值;
在每层中任意挑选一张表作为示例。
image.png

2. 功能模块

image.png

3. 开发环境准备

1. Python开发环境准备

本文使用Python和Shell脚本实现数据质量监控的各项功能,故需先搭建相应的开发环境,Python开发可选择IDEA(需安装Python插件),或PyCharm等工具,本文使用IDEA作为开发工具。

  1. 安装Python插件
    在IDEA中点击“File”,在下拉选择中点击“Settings…”
    image.png

点击“Plugins”,点击右上角的“Marketplace”,然后在搜索框中输入“python”,在搜索结果列表中找到Python插件,点击“Install”,安装插件。
image.png

  1. 新建一个Python项目
    点击Idea中的“File”,在下列列表中点击“New”,在右侧弹出的列表中点击“Project…”
    image.png

在新建的工程中,点击“Python”,然后点击Next
image.png

首次创建Python项目,会提示无Python SDK,此处选择Yes,后续再添加SDK。
image.png

填写项目名称和项目路径等基本信息,点击Finish
image.png

添加Python SDK
为了保证测试和运行的Python环境一致,我们配置项目采用远程集群的Python环境执行本地代码,以下为具体配置步骤。
第一步:点击“File”→“Project Structure”
image.png

第二步:按照下图操作,增加Python SDK。
image.png

第三步:点击“SSH Interpreter”,选择“Existing server configuration”,点击“…”
image.png

第四步:点击“+”,填入ssh连接信息,点击Next
image.png

第五步:点击Finish
image.png

第六步:点击OK
image.png

2. 初始化MySQL环境

MySQL主要用于存储数据质量监控的结果值,这里需要提前建库建表。详细建表语句如下:
1.创建data_supervisor库

drop database if exists data_supervisor;
create database data_supervisor;

2.创建空值指标表,null_id

CREATE TABLE data_supervisor.`null_id`
(
    `dt`                 date        NOT NULL COMMENT '日期',
    `tbl`                varchar(50) NOT NULL COMMENT '表名',
    `col`                varchar(50) NOT NULL COMMENT '列名',
    `value`              int         DEFAULT NULL COMMENT '空ID个数',
    `value_min`          int         DEFAULT NULL COMMENT '下限',
    `value_max`          int         DEFAULT NULL COMMENT '上限',
    `notification_level` int         DEFAULT NULL COMMENT '警告级别',
    PRIMARY KEY (`dt`, `tbl`, `col`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8
    comment '空值指标表';

3.创建重复值指标表,duplicate

CREATE TABLE data_supervisor.`duplicate`
(
    `dt`                 date        NOT NULL COMMENT '日期',
    `tbl`                varchar(50) NOT NULL COMMENT '表名',
    `col`                varchar(50) NOT NULL COMMENT '列名',
    `value`              int         DEFAULT NULL COMMENT '重复值个数',
    `value_min`          int         DEFAULT NULL COMMENT '下限',
    `value_max`          int         DEFAULT NULL COMMENT '上限',
    `notification_level` int         DEFAULT NULL COMMENT '警告级别',
    PRIMARY KEY (`dt`, `tbl`, `col`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8
    comment '重复值指标表';

4.创建值域指标表,rng

CREATE TABLE data_supervisor.`rng`
(
    `dt`                 date        NOT NULL COMMENT '日期',
    `tbl`                varchar(50) NOT NULL COMMENT '表名',
    `col`                varchar(50) NOT NULL COMMENT '列名',
    `value`              int         DEFAULT NULL COMMENT '超出预定值域个数',
    `range_min`          int         DEFAULT NULL COMMENT '值域下限',
    `range_max`          int         DEFAULT NULL COMMENT '值域上限',
    `value_min`          int         DEFAULT NULL COMMENT '下限',
    `value_max`          int         DEFAULT NULL COMMENT '上限',
    `notification_level` int         DEFAULT NULL COMMENT '警告级别',
    PRIMARY KEY (`dt`, `tbl`, `col`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8
    comment '值域指标表';

5.创建环比增长指标表,day_on_day

CREATE TABLE data_supervisor.`day_on_day`
(
    `dt`                 date        NOT NULL COMMENT '日期',
    `tbl`                varchar(50) NOT NULL COMMENT '表名',
    `value`              double DEFAULT NULL COMMENT '环比增长百分比',
    `value_min`          double DEFAULT NULL COMMENT '增长上限',
    `value_max`          double DEFAULT NULL COMMENT '增长上限',
    `notification_level` int    DEFAULT NULL COMMENT '警告级别',
    PRIMARY KEY (`dt`, `tbl`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8
    comment '环比增长指标表';

6.创建同比增长指标表,week_on_week

CREATE TABLE data_supervisor.`week_on_week`
(
    `dt`                 date        NOT NULL COMMENT '日期',
    `tbl`                varchar(50) NOT NULL COMMENT '表名',
    `value`              double DEFAULT NULL COMMENT '同比增长百分比',
    `value_min`          double DEFAULT NULL COMMENT '增长上限',
    `value_max`          double DEFAULT NULL COMMENT '增长上限',
    `notification_level` int    DEFAULT NULL COMMENT '警告级别',
    PRIMARY KEY (`dt`, `tbl`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8
    comment '同比增长指标表';
上一篇 下一篇