IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据项目--数据质量篇 -> 正文阅读

[大数据]大数据项目--数据质量篇

第一章 数据质量

1.1 概述

数据质量的高低代表了该数据满足数据消费者期望的程度,这种程度基于他们对数据的使用预期,只有达到数据的使用预期才能给予管理层正确的决策参考。数据质量管理作为数据仓库的一个重要模块,主要可以分为数据的健康标准量化、监控和保障。

1.2. 数据质量标准分类

① 数据完整性: 数据不存在大量的缺失值、不缺少某一日期/部门/地点等部分维度的数据,同时在ETL过程当中应保证数据的完整不丢失。验证数据时总数应符合正常规律时间推移,记录数总数的增长符合正常的趋势。
② 数据一致性: 数仓各层的数据,应与上一层保持数据一致,最终经过数据清洗转化(ETL)的宽表/指标能和数据源保持一致。
③ 数据不重复性:一个数据集当中同一条数据记录不能出现多次,数据不能大量重复冗余,保证数据的唯一性。

1.3 数据质量管理解决方案

本文通过Shell命令和Hive脚本的方式,通过验证增量数据的记录数、全表空值记录数、全表记录数、全表重复值记录数是否在合理的范围之内,以及验证数据来源表和目标表一致性,确定当日的数据是否符合健康标准,达到数据质量的监控与管理。

第2章 ODS层数据校验

2.1 数据校验通用脚本

通过shell脚本调用hive,检验当日分区增加的记录数量和全表记录数量是否在合理的范围之内,同时检验关键字段为空的记录的记录数量以及重复值的数量。

1)创建数据检查脚本文件夹,用于存放数据校验shell脚本

[atguigu@hadoop102 module]$ mkdir -p data_check/sh
[atguigu@ hadoop102 sh]$ pwd /opt/module/data_check/sh

2)在Hive中创建表数据质量校验记录表,记录数据校验的各个指标:

[atguigu@atguigu data_check]$ hive

创建数据库,用于存放数据质量校验的结果数据:

hive (default)> create database datacheck;

创建数据表,用于存放ods层的数据检验结果:

hive (datacheck)> create table datacheck.table_count_add_standard(
    data_date string comment '数据时间分区dt',
    database_name string comment '库名',
table_name string comment '表名',
table_type string comment '表类型(全量/增量)',
    add_count bigint comment '当日增量数据的记录数',
null_count bigint comment '表空值记录数',
duplicate_count bigint comment '表重复值记录数',
total_count bigint comment '全表记录数'
);
hive (datacheck)>quit;

3)在路径/opt/module/data_check/sh下创建数据检验增量表通用shell脚本

[atguigu@hadoop102 sh]$ vim increment_data_check_public.sh

在脚本中编写如下内容:

#!/bin/bash
# 增量数据所在的日期分区
do_date=$1
# 校验数据的表名
table_name=$2
# 需要校验空值的列名,以逗号’,’隔开
null_column=$3
# 初始化SQL查询语句
null_where_sql_str=''
# 将空值检验字符串切成列名数组
array=(${null_column//,/ })
# 遍历数组,拼接空值查询条件
for(( i=0;i<${#array[@]};i++)) do
   if [ $i -eq 0 ];then
        null_where_sql_str=" where ${array[i]} is null "
   else
        null_where_sql_str="$null_where_sql_str or ${array[i]} is null "
   fi
done;
echo "------------------检验增量记录数--------------------"
# 执行当日增量数据记录数量SQL查询语句
add_count_query_result=`hive -e "select count(*) from gmall.$table_name where dt='$do_date'"`
# 取出当日增量数据记录数量
add_count=${add_count_query_result:3}
echo "------------------检验全表记录数--------------------"
# 执行当日全表数据记录数量SQL查询语句
total_count_query_result=`hive -e "select count(*) from gmall.$table_name"`
# 取出当日全量数据记录数量
total_count=${total_count_query_result:3}
echo "------------------检验空值记录数--------------------"
# 执行全表空值数据记录数量SQL查询语句
table_null_query_result=`hive -e "select count(*) from gmall.$table_name $null_where_sql_str"`
# 取出全表空值数据记录数量
null_count=${table_null_query_result:3}
echo "------------------检验重复值记录数--------------------"
# 执行全表重复值的记录数量SQL查询语句
table_duplicate_query_result=`hive -e "select sum(tmp.duplicate_count) as duplicate_sum from (select count(*) as duplicate_count from gmall.$table_name group by $null_column having count(*)>1) as tmp"`
# 取出全表重复值数据记录数量
duplicate_count=${table_duplicate_query_result:3}
echo "------------------开始插入数据--------------------"
hive -e "insert into datacheck.table_count_add_standard values('$do_date','gmall','$table_name','increment_table', '$add_count', '$null_count', '$duplicate_count', '$total_count')"
# 将所有数据检验结果插入到表中

脚本参数注释:
第一个参数:传入时间分区参数( dt )
第二个参数:需要进行数据校验的表名( table_name )
第三个参数:需要判断是否为空值或重复值的字段名称用逗号‘ ,’隔开,例如:col1,col2,col3
给脚本/opt/module/data_check/sh/increment_data_check_public.sh赋权限:

[atguigu@hadoop102 sh]$ chmod 777 increment_data_check_public.sh

脚本执行示例:

[atguigu@hadoop102 sh]$ ./increment_data_check_public.sh 2020-06-14 ods_activity_rule id,activity_id

4)在路径/opt/module/data_check/sh下创建数据检验全量表通用shell脚本

[atguigu@hadoop102 sh]$ vim total_data_check_public.sh

在脚本中编写如下内容:

#!/bin/bash
# 增量数据所在的日期分区
do_date=$1
# 校验数据的表名
table_name=$2
# 需要校验空值的列名,以逗号’,’隔开
null_column=$3
# 将空值检验字符串切成列名数组
null_where_sql_str=''
# 遍历数组,拼接空值查询条件
array=(${null_column//,/ })
# 遍历数组,拼接空值查询条件
for(( i=0;i<${#array[@]};i++)) do
   if [ $i -eq 0 ];then
        null_where_sql_str=" where ${array[i]} is null "
   else
        null_where_sql_str="$null_where_sql_str or ${array[i]} is null "
   fi
done;
# 执行当日全表数据记录数量SQL查询语句table_count_query_result=`hive -e "select count(*) from gmall.$table_name"`
# 取出当日全量数据记录数量
table_count=${table_count_query_result:3}
echo "------------------检验全表记录数--------------------"
# 执行全表空值数据记录数量SQL查询语句
table_null_query_result=`hive -e "select count(*) from gmall.$table_name $null_where_sql_str"`
# 取出全表空值数据记录数量
null_count=${table_null_query_result:3}
echo "------------------检验重复值--------------------"
# 执行全表重复值的记录数量SQL查询语句
table_duplicate_query_result=`hive -e "select sum(tmp.duplicate_count) as duplicate_sum from (select count(*) as duplicate_count from gmall.$table_name group by $null_column having count(*)>1) as tmp"`
# 取出全表重复值数据记录数量
duplicate_count=${table_duplicate_query_result:3}
echo "------------------开始插入数据--------------------"
# 将所有数据检验结果插入到表中
hive -e "insert into datacheck.table_count_add_standard values('$do_date','gmall','$table_name','total_table',null, '$null_count', '$duplicate_count','$table_count')"

脚本参数注释:
第一个参数:传入数据校验日期( dt )
第二个参数:需要进行数据校验的表名( table_name )
第三个参数:需要判断是否为空值的字段名称用逗号’ , ‘隔开,例如:col1,col2,col3
给脚本/opt/module/data_check/sh/total_data_check_public.sh赋权限:

[atguigu@hadoop102 sh]$ chmod 777 total_data_check_public.sh

脚本执行示例:

[atguigu@hadoop102 sh]$ ./total_data_check_public.sh 2020-06-14 ods_activity_rule id,activity_id

2.2 ODS层各表检验

  1. 涉及表
    增量检查
    (1)订单详情表(ods_order_detail)
    (2)用户表(ods_user_info)
    (3)支付流水表(ods_payment_info)
    (4)订单状态表(ods_order_status_log)
    (5)商品评论表(ods_comment_info)
    (6)退单表(ods_order_refund_info)
    (7)活动订单关联表(ods_activity_order)
    全量检查
    (1)订单表(ods_order_info)
    (2)SKU商品表(ods_sku_info)
    (3)商品一级分类表(ods_base_category1)
    (4)商品二级分类表(ods_base_category2)
    (5)商品三级分类表(ods_base_category3)
    (6)品牌表(ods_base_trademark)
    (7)SPU商品表(ods_spu_info)
    (8)加购表(ods_cart_info)
    (9)商品收藏表(ods_favor_info)
    (10)优惠券领用表(ods_coupon_use)
    (11)优惠券表(ods_coupon_info)
    (12)活动表(ods_activity_info)
    (13)优惠规则表(ods_activity_rule)
    (14)编码字典表(ods_base_dic)

  2. ODS层数据检查脚本
    1)在路径/opt/module/data_check/sh下创建ODS层数据检查脚本

[atguigu@atguigu sh]$ pwd /opt/module/data_check/sh
[atguigu@atguigu sh]$ vim ods_data_check.sh
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:59:31  更:2022-09-30 01:04:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/20 6:58:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码