目录

第1章 数据质量整体概述

1.1  概述

1.2. 数据质量标准分类

1.3  数据质量管理解决方案

第2章 ODS层数据校验

2.1 数据校验通用脚本

2.2 ODS层各表检验

第3章 DWD层数据校验

3.1 数据校验通用脚本

3.2 DWD层各表检验

第4章 DWS层数据校验

4.1 DWS层数据质量校验

4.2 DWS层数据校验脚本

第5章 DWT层数据校验

5.1 DWT层数据质量校验方法

5.2 宽表校验脚本

第6章 ADS层数据校验


第1章 数据质量整体概述

1.1  概述

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

1.2. 数据质量标准分类

数据完整性: 数据不存在大量的缺失值、不缺少某一日期/部门/地点等部分维度的数据,同时在ETL过程当中应保证数据的完整不丢失。验证数据时总数应符合正常规律时间推移,记录数总数的增长符合正常的趋势。

数据一致性: 数仓各层的数据,应与上一层保持数据一致,最终经过数据清洗转化(ETL)的宽表/指标能和数据源保持一致。

数据不重复性:一个数据集当中同一条数据记录不能出现多次,数据不能大量重复冗余,保证数据的唯一性。

1.3  数据质量管理解决方案

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

第2章 ODS层数据校验

2.1 数据校验通用脚本

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

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

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

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

[centos@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脚本

[centos@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++)) doif [ $i -eq 0 ];thennull_where_sql_str=" where ${array[i]} is null "elsenull_where_sql_str="$null_where_sql_str or ${array[i]} is null "fidone;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赋权限:[centos@hadoop102 sh]$ chmod 777 increment_data_check_public.sh脚本执行示例:[centos@hadoop102 sh]$./increment_data_check_public.sh 2020-06-14 ods_activity_rule id,activity_id

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

[centos@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++)) doif [ $i -eq 0 ];thennull_where_sql_str=" where ${array[i]} is null "elsenull_where_sql_str="$null_where_sql_str or ${array[i]} is null "fidone;# 执行当日全表数据记录数量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赋权限:[centos@hadoop102 sh]$ chmod 777 total_data_check_public.sh脚本执行示例:[centos@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层数据检查脚本

[centos@centos sh]$ pwd/opt/module/data_check/sh[centos@centos sh]$ vim ods_data_check.sh在脚本中编写如下内容:#!/bin/bashdata_date=$1# 增量检查# 订单详情表/opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_order_detail id,order_id,user_id,sku_id,sku_name,order_price,sku_num,create_time# 用户表/opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_user_info id,name,birthday,gender,email,user_level,create_time,operate_time# 支付流水表/opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_payment_info id,out_trade_no,order_id,user_id,alipay_trade_no,total_amount,subject,payment_type,payment_time# 订单状态表/opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_order_status_log id,order_id,order_status,operate_time# 商品评论表/opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_comment_info id,user_id,sku_id,spu_id,order_id,appraise,create_time# 退单表/opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_order_refund_info id,user_id,order_id,sku_id,refund_type,refund_num,refund_amount,refund_reason_type,create_time# 活动订单关联表/opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_activity_order id,activity_id,order_id,create_time# 全量检查# 订单表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_order_info id,final_total_amount,order_status,user_id,out_trade_no,create_time,operate_time,province_id,benefit_reduce_amount,original_total_amount,feight_fee# SKU商品表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_sku_info id,spu_id,price,sku_name,sku_desc,weight,tm_id,category3_id,create_time# 商品一级分类表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_base_category1 id,name# 商品二级分类表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_base_category2 id,name,category1_id# 商品三级分类表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_base_category3 id,name,category2_id# 品牌表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_base_trademark tm_id,tm_name# SPU商品表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_spu_info id,spu_name,category3_id,tm_id# 加购表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_cart_info id,user_id,sku_id,cart_price,sku_num,sku_name,create_time,operate_time,is_ordered,order_time# 商品收藏表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_favor_info id,user_id,sku_id,spu_id,is_cancel,create_time,cancel_time# 优惠券领用表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_coupon_use id,coupon_id,user_id,order_id,coupon_status,get_time,using_time,used_time# 优惠券表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_coupon_info id,coupon_name,coupon_type,condition_amount,condition_num,activity_id,benefit_amount,benefit_discount,create_time,range_type,spu_id,tm_id,category3_id,limit_num,operate_time,expire_time# 活动表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_activity_info id,activity_name,activity_type,start_time,end_time,create_time# 优惠规则表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_activity_rule id,activity_id,condition_amount,condition_num,benefit_amount,benefit_discount,benefit_level# 编码字典表/opt/module/data_check/sh/total_data_check_public.sh $data_date ods_base_dic dic_code,dic_name,parent_code,create_time,operate_time2)给脚本/opt/module/data_check/sh/ods_data_check.sh赋权限:[centos@centos sh]$ chmod 777 ods_data_check.sh

第3章 DWD层数据校验

3.1 数据校验通用脚本

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

hive (datacheck)> create table datacheck.dwd_table_data_check(data_date string comment '数据时间分区dt',database_name string comment '库名',source_table_name string comment '数据源表表名',source_column string comment '数据源表字段名',target_table_name string comment '数据目标表表名',target_column string comment '数据目标表字段名',consistent_data_count bigint comment '全表数据一致记录数',source_table_count bigint comment '数据源表全表记录数',target_table_count bigint comment '数据目标表全表记录数',target_duplicate_count bigint comment '数据目标表重复记录数');hive (datacheck)>quit;

2)在路径/opt/module/data_check/sh下创建dwd层数据一致性检验通用shell脚本

[centos@hadoop102 sh]$ vim table_consistent_check_public.sh

在脚本中编写如下内容:

#!/bin/bash# 增量数据所在的日期分区do_date=$1# 校验数据源表的表名source_table_name=$2# 检验数据源表的字段(与目标表顺序一致才能对比两个字段)source_column=$3# 检验数据目标表的表名target_table_name=$4# 检验数据目标表的字段(与源表顺序一致才能对比两个字段)target_column=$5# 初始化SQL查询语句join_on_sql_str=''# 将检验数据源表的字段切成列名数组source_column_array=(${source_column//,/ })# 将检验数据目标表的字段切成列名数组target_column_array=(${target_column//,/ })# 遍历数组,拼接表关联条件,输入字段全部关联for(( i=0;i<${#source_column_array[@]};i++)) doif [ $i -eq 0 ];thenjoin_on_sql_str=" on $source_table_name.${source_column_array[i]}=$target_table_name.${target_column_array[i]} "elsejoin_on_sql_str="$join_on_sql_str and $source_table_name.${source_column_array[i]}=$target_table_name.${target_column_array[i]} "fidone;echo "-------------ods-dwd  一致性检查-------------"# 执行数据源表和目标表关联查询SQL语句,查询数据一致的条数consistent_data_query_result=`hive -e "select count(*) from gmall.$source_table_name join gmall.$target_table_name $join_on_sql_str"`# 取出全表查询数据一致的条数consistent_data_count=${consistent_data_query_result:3}echo "---------------ods层记录条数-----------------"# 执行查询数据源表的记录条数source_table_query_result=`hive -e "select count(*) from gmall.$source_table_name"`# 取出全表数据源表的记录条数source_table_count=${source_table_query_result:3}echo "---------------dwd层记录条数-----------------"# 执行查询数据目标表的记录条数target_table_query_result=`hive -e "select count(*) from gmall.$target_table_name"`# 取出全表数据目标表的记录条数target_table_count=${target_table_query_result:3}# 执行全表重复值的记录数量SQL查询语句table_duplicate_query_result=`hive -e "select sum(tmp.duplicate_count) as duplicate_sum from (select count(*) as duplicate_count from gmall.$target_table_name group by $target_column having count(*)>1) as tmp"`# 取出全表重复值数据记录数量duplicate_count=${table_duplicate_query_result:3}# 将所有数据检验结果插入到表中hive -e "insert into datacheck.dwd_table_data_check values('$do_date','gmall','$source_table_name','$source_column','$target_table_name','$target_column','$consistent_data_count','$source_table_count','$target_table_count','$duplicate_count')"

脚本参数注释:

  • 第1个参数:传入时间分区参数( dt )
  • 第2个参数:需要进行数据校验源表的表名(source_table_name )
  • 第3个参数:需要校验的数据源表字段名称用逗号‘ ,’隔开,例如:col1,col2,col3
  • 第4个参数:需要进行数据校验目标表的表名(target_table_name )
  • 第5个参数:需要校验的数据目标表字段名称用逗号‘ ,’隔开,例如:col1,col2,col3

给脚本/opt/module/data_check/sh/increment_data_check_public.sh赋权限:

[centos@hadoop102 sh]$ chmod 777 table_consistent_check_public.sh

脚本执行示例:

[centos@hadoop102 sh]$ ./table_consistent_check_public.sh 2020-06-14 ods_base_province name dwd_dim_base_province province_name

3.2 DWD层各表检验

1. 业务数据表数据检验

  • 优惠券信息表

数据源表:ods_coupon_info

源表字段:id,coupon_name,coupon_type,condition_amount,condition_num,activity_id,benefit_amount,benefit_discount,create_time,range_type,spu_id,tm_id,category3_id,limit_num,operate_time,expire_time

数据目标表:dwd_dim_coupon_info

目标表字段:id,coupon_name,coupon_type,condition_amount,condition_num,activity_id,benefit_amount,benefit_discount,create_time,range_type,spu_id,tm_id,category3_id,limit_num,operate_time,expire_time

分区:dt='2020-06-14'

数据检查脚本:

[centos@hadoop102 sh]$ pwd/opt/module/data_check/sh[centos@hadoop102 sh]$ /opt/module/data_check/sh/table_consistent_check_public.sh 2020-06-14 ods_coupon_info id,coupon_name,coupon_type,condition_amount,condition_num,activity_id,benefit_amount,benefit_discount,create_time,range_type,spu_id,tm_id,category3_id,limit_num,operate_time,expire_time dwd_dim_coupon_info id,coupon_name,coupon_type,condition_amount,condition_num,activity_id,benefit_amount,benefit_discount,create_time,range_type,spu_id,tm_id,category3_id,limit_num,operate_time,expire_time
  • 订单明细事实表

数据源表:ods_order_detail

源表字段:id,order_id,user_id,sku_id,sku_name,order_price,sku_num,create_time

数据目标表:dwd_fact_order_detail

目标表字段:id,order_id,user_id,sku_id,sku_name,order_price,sku_num,create_time

分区:dt='2020-06-14'

数据检查脚本:

[centos@hadoop102 sh]$ pwd/opt/module/data_check/sh[centos@hadoop102 sh]$ /opt/module/data_check/sh/table_consistent_check_public.sh 2020-06-14 ods_order_detail id,order_id,user_id,sku_id,sku_name,order_price,sku_num,create_time dwd_fact_order_detail id,order_id,user_id,sku_id,sku_name,order_price,sku_num,create_time
  • 支付事实表

数据源表:ods_payment_info

源表字段:id,out_trade_no,order_id,user_id,alipay_trade_no,total_amount,subject,payment_type,payment_time

数据目标表:dwd_fact_payment_info

目标表字段:id,out_trade_no,order_id,user_id,alipay_trade_no,payment_amount,subject,payment_type,payment_time

分区:dt='2020-06-14'

数据检查脚本:

[centos@hadoop102 sh]$ pwd/opt/module/data_check/sh[centos@hadoop102 sh]$ /opt/module/data_check/sh/table_consistent_check_public.sh 2020-06-14 ods_payment_info id,out_trade_no,order_id,user_id,alipay_trade_no,total_amount,subject,payment_type,payment_time dwd_fact_payment_info id,out_trade_no,order_id,user_id,alipay_trade_no,payment_amount,subject,payment_type,payment_time
  • 退款事实表

数据源表:ods_order_refund_info

源表字段:id,user_id,order_id,sku_id,refund_type,refund_num,refund_amount,refund_reason_type,create_time

数据目标表:dwd_fact_order_refund_info

目标表字段:id,user_id,order_id,sku_id,refund_type,refund_num,refund_amount,refund_reason_type,create_time

分区:dt='2020-06-14'

数据检查脚本:

[centos@hadoop102 sh]$ pwd/opt/module/data_check/sh[centos@hadoop102 sh]$ /opt/module/data_check/sh/table_consistent_check_public.sh 2020-06-14 ods_order_refund_info id,user_id,order_id,sku_id,refund_type,refund_num,refund_amount,refund_reason_type,create_time dwd_fact_order_refund_info id,user_id,order_id,sku_id,refund_type,refund_num,refund_amount,refund_reason_type,create_time
  • 评价事实表

数据源表:ods_comment_info

源表字段:id,user_id,sku_id,spu_id,order_id,appraise,create_time

数据目标表:dwd_fact_comment_info

目标表字段:id,user_id,sku_id,spu_id,order_id,appraise,create_time

分区:dt='2020-06-14'

数据检查脚本:

[centos@hadoop102 sh]$ pwd/opt/module/data_check/sh[centos@hadoop102 sh]$ /opt/module/data_check/sh/table_consistent_check_public.sh 2020-06-14 ods_comment_info id,user_id,sku_id,spu_id,order_id,appraise,create_time dwd_fact_comment_info id,user_id,sku_id,spu_id,order_id,appraise,create_time
  • 加购事实表

数据源表:ods_cart_info

源表字段:id,user_id,sku_id,cart_price,sku_num,sku_name,create_time,operate_time,is_ordered,order_time

数据目标表:dwd_fact_cart_info

目标表字段:id,user_id,sku_id,cart_price,sku_num,sku_name,create_time,operate_time,is_ordered,order_time

分区:dt='2020-06-14'

数据检查脚本:

[centos@hadoop102 sh]$ pwd/opt/module/data_check/sh[centos@hadoop102 sh]$ /opt/module/data_check/sh/table_consistent_check_public.sh 2020-06-14 ods_cart_info id,user_id,sku_id,cart_price,sku_num,sku_name,create_time,operate_time,is_ordered,order_time dwd_fact_cart_info id,user_id,sku_id,cart_price,sku_num,sku_name,create_time,operate_time,is_ordered,order_time
  • 收藏事实表

数据源表:ods_favor_info

源表字段:id,user_id,sku_id,spu_id,is_cancel,create_time,cancel_time

数据目标表:dwd_fact_favor_info

目标表字段:id,user_id,sku_id,spu_id,is_cancel,create_time,cancel_time

分区:dt='2020-06-14'

数据检查脚本:

[centos@hadoop102 sh]$ pwd/opt/module/data_check/sh[centos@hadoop102 sh]$ /opt/module/data_check/sh/table_consistent_check_public.sh 2020-06-14 ods_favor_info id,user_id,sku_id,spu_id,is_cancel,create_time,cancel_time dwd_fact_favor_info id,user_id,sku_id,spu_id,is_cancel,create_time,cancel_time

2. DWD层数据检查脚本

1)在路径/opt/module/data_check/sh下创建dwd层数据一致性检验shell脚本

[centos@hadoop102 sh]$ vim dwd_data_check.sh

2)在脚本中编写如下内容:

#!/bin/bash# 数据所在的日期分区do_date=$1/opt/module/data_check/sh/table_consistent_check_public.sh $do_date ods_coupon_info id,coupon_name,coupon_type,condition_amount,condition_num,activity_id,benefit_amount,benefit_discount,create_time,range_type,spu_id,tm_id,category3_id,limit_num,operate_time,expire_time dwd_dim_coupon_info id,coupon_name,coupon_type,condition_amount,condition_num,activity_id,benefit_amount,benefit_discount,create_time,range_type,spu_id,tm_id,category3_id,limit_num,operate_time,expire_time/opt/module/data_check/sh/table_consistent_check_public.sh $do_date ods_order_detail id,order_id,user_id,sku_id,sku_name,order_price,sku_num,create_time dwd_fact_order_detail id,order_id,user_id,sku_id,sku_name,order_price,sku_num,create_time/opt/module/data_check/sh/table_consistent_check_public.sh $do_date ods_payment_info id,out_trade_no,order_id,user_id,alipay_trade_no,total_amount,subject,payment_type,payment_time dwd_fact_payment_info id,out_trade_no,order_id,user_id,alipay_trade_no,payment_amount,subject,payment_type,payment_time/opt/module/data_check/sh/table_consistent_check_public.sh $do_date ods_order_refund_info id,user_id,order_id,sku_id,refund_type,refund_num,refund_amount,refund_reason_type,create_time dwd_fact_order_refund_info id,user_id,order_id,sku_id,refund_type,refund_num,refund_amount,refund_reason_type,create_time/opt/module/data_check/sh/table_consistent_check_public.sh $do_date ods_comment_info id,user_id,sku_id,spu_id,order_id,appraise,create_time dwd_fact_comment_info id,user_id,sku_id,spu_id,order_id,appraise,create_time/opt/module/data_check/sh/table_consistent_check_public.sh $do_date ods_cart_info id,user_id,sku_id,cart_price,sku_num,sku_name,create_time,operate_time,is_ordered,order_time dwd_fact_cart_info id,user_id,sku_id,cart_price,sku_num,sku_name,create_time,operate_time,is_ordered,order_time/opt/module/data_check/sh/table_consistent_check_public.sh $do_date ods_favor_info id,user_id,sku_id,spu_id,is_cancel,create_time,cancel_time dwd_fact_favor_info id,user_id,sku_id,spu_id,is_cancel,create_time,cancel_time

脚本参数注释:

第1个参数:传入时间分区参数( dt )

3)给脚本/opt/module/data_check/sh/dwd_data_check.sh赋权限:

[centos@hadoop102 sh]$ chmod 777 dwd_data_check.sh

脚本执行示例:

[centos@hadoop102 sh]$ ./dwd_data_check.sh 2020-06-15

第4章 DWS层数据校验

4.1 DWS层数据质量校验

由于DWS层数据质量无法从一致性进行判断,只能通过表记录数以及空值记录数等维度判断, 所以在DWS将检验当日宽表记录数量是否在合理的范围之内,同时检验关键字段为空的记录的记录数量。

4.2 DWS层数据校验脚本

1. 数据校验涉及表

            每日会员行为

                 每日商品行为

                 每日活动行为

                 每日地区行为

2.数据质量校验脚本

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

[centos@centos sh]$ pwd/opt/module/data_check/sh[centos@centos sh]$ vim dws_data_check.sh

在脚本中编写如下内容:

#!/bin/bashdata_date=$1

# 每日会员行为

/opt/module/data_check/sh/total_data_check_public.sh $data_date dws_user_action_daycount user_id,login_count,cart_count,order_count

# 每日商品行为

/opt/module/data_check/sh/total_data_check_public.sh $data_date dws_sku_action_daycount sku_id,order_count,order_num,order_amount,payment_count,payment_num,payment_amount,refund_count

# 每日活动行为

/opt/module/data_check/sh/total_data_check_public.sh $data_date dws_activity_info_daycount id,activity_name,activity_type,start_time,end_time,create_time,display_count

# 每日地区统计

/opt/module/data_check/sh/total_data_check_public.sh $data_date dws_area_stats_daycount id,province_name,area_code,iso_code,region_id,region_name,login_count,order_count,order_amount,payment_count,payment_amount

2)给脚本/opt/module/data_check/sh/dws_data_check.sh赋权限:

[centos@centos sh]$ chmod 777 dws_data_check.sh

3)执行/opt/module/data_check/sh/dws_data_check.sh,检验2020-06-14当日宽表数据质量。

[centos@centos sh]$ ./dws_data_check.sh 2020-06-14

第5章 DWT层数据校验

5.1 DWT层数据质量校验方法

在宽表阶段数据已经经过了一定的判断、过滤和变换等操作,因此在DWT层也将检验当日宽表记录数量是否在合理的范围之内,同时检验关键字段为空的记录的记录数量。

5.2 宽表校验脚本

1. 数据校验涉及表

设备主题宽表

会员主题宽表

商品主题宽表

活动主题宽表

地区主题宽表

2.数据质量校验脚本

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

[centos@centos sh]$ pwd/opt/module/data_check/sh[centos@centos sh]$ vim dwt_data_check.sh在脚本中编写如下内容:#!/bin/bashdata_date=$1

# 全量检查

# 设备主题宽表

/opt/module/data_check/sh/total_data_check_public.sh $data_date dwt_uv_topic mid_id,brand,model,login_date_first,login_date_last,login_day_count,login_count

# 会员主题宽表

/opt/module/data_check/sh/total_data_check_public.sh $data_date dwt_user_topic user_id,login_date_first,login_date_last,login_count,login_last_30d_count,order_date_first,order_date_last,order_count,order_amount,order_last_30d_count,order_last_30d_amount,payment_date_first,payment_date_last,payment_count,payment_amount,payment_last_30d_count,payment_last_30d_amount

# 商品主题宽表

/opt/module/data_check/sh/total_data_check_public.sh $data_date dwt_sku_topic sku_id,spu_id,order_last_30d_count,order_last_30d_num,order_last_30d_amount,order_count,order_num,order_amount

# 活动主题宽表

/opt/module/data_check/sh/total_data_check_public.sh $data_date dwt_activity_topic id,activity_name,activity_type,start_time,end_time,create_time,display_day_count,order_day_count,order_day_amount,payment_day_count,payment_day_amount,display_count,order_count,order_amount,payment_count,payment_amount

# 地区主题宽表

/opt/module/data_check/sh/total_data_check_public.sh $data_date id,province_name,area_code,iso_code,region_id,region_name,login_day_count,login_last_30d_count,order_day_count,order_day_amount,order_last_30d_count,order_last_30d_amount,payment_day_count,payment_day_amount,payment_last_30d_count,payment_last_30d_amount

2)给脚本/opt/module/data_check/sh/dwt_data_check.sh赋权限:

[centos@centos sh]$ chmod 777 dwt_data_check.sh

3)执行/opt/module/data_check/sh/dwt_data_check.sh,检验2020-06-15当日宽表数据质量。

[centos@centos sh]$ ./dwt_data_check.sh 2020-16-15

第6章 ADS层数据校验

数据仓库中ADS层数据是经过高度聚合计算的具体指标,因此无法从技术层面进行判断数据是否健康。需要通过校对对各个指标的数值是否在合理的范围之内进行校验,进行定制化数据校验。由于ADS层涉及的需求无法一一涉及,因此在这针对一个需求进行分析。

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

[centos@centos data_check]$ hive创建数据库,用于存放数据质量校验的结果数据:hive (default)> create database datacheck;创建数据表,用于存放ods层的数据检验结果:hive (datacheck)> create table datacheck.ads_table_data_check(data_date string comment '数据时间分区dt',database_name string comment '库名',table_name string comment '表名',column_name string comment '指标名',healthy_value string comment '该指标合理值',now_value bigint comment '该指标当前值',is_healthy bigint comment '该指标是否合理:1合理/0不合理');hive (datacheck)>quit;

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

[centos@hadoop102 sh]$ vim ads_data_check.sh在脚本中编写如下内容:#!/bin/bash# 增量数据所在的日期分区do_date=$1hive -e "insert into datacheck.ads_table_data_check selecttemp.data_date,temp.database_name,temp.table_name,temp.column_name,temp.healthy_value,temp.new_mid_count,temp.is_healthyfrom (select\"$do_date\" as data_date,\"gmall\" as database_name,\"ads_new_mid_count\" as table_name,\"new_mid_count\" as column_name,\"bigger than 300\" as healthy_value,new_mid_count,if(new_mid_count>300,1,0) as is_healthyfrom gmall.ads_new_mid_count) as temp"脚本参数注释:第一个参数:传入时间分区参数( dt )给脚本/opt/module/data_check/sh/ads_data_check.sh赋权限:[centos@hadoop102 sh]$ chmod 777 ads_data_check.sh脚本执行示例:[centos@hadoop102 sh]$./ads_data_check.sh 2020-06-14

数据仓库之数据质量管理相关推荐

  1. 数据仓库数据质量管理【转】

    一个完善的数据仓库必须含有一个完整的数据质量管理系统与元数据管理系统,但是目前国内的数据仓库对数据质量管理这块都不是那么重视,我个人觉得这是一个很大的误区,一个数据仓库如果连数据质量都无法保证,还如何 ...

  2. access对比数据_数据仓库系列之数据质量管理

    数据质量一直是数据仓库领域一个比较令人头疼的问题,因为数据仓库上层对接很多业务系统,业务系统的脏数据,业务系统变更,都会直接影响数据仓库的数据质量.因此数据仓库的数据质量建设是一些公司的重点工作. 一 ...

  3. 数据治理(四):数据仓库数据质量管理

    文章目录 数据仓库数据质量管理 一."商户营收统计"业务

  4. 数据仓库系列之数据质量管理

    数据质量一直是数据仓库领域一个比较令人头疼的问题,因为数据仓库上层对接很多业务系统,业务系统的脏数据,业务系统变更,都会直接影响数据仓库的数据质量.因此数据仓库的数据质量建设是一些公司的重点工作. 一 ...

  5. 数据治理(三):数据质量管理

    ​​​​​​ 目录 ​​​​​​ 数据质量管理 一.数据质量概述 二.数据质量问题根源 三.​​​​​​​数据质量保障原则 1.​​​​​​​完整性 2.​​​​​​​准确性 3.​​​​​​​一致性 ...

  6. 如何基于MaxCompute快速打通数据仓库和数据湖的湖仓一体实践

    简介: MaxCompute 是面向分析的企业级 SaaS 模式云数据仓库,以 Serverless 架构提供快速.全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用户 ...

  7. 基于MaxCompute的数仓数据质量管理

    声明 本文中介绍的非功能性规范均为建议性规范,产品功能无强制,仅供指导. 参考文献 <大数据之路--阿里巴巴大数据实践>--阿里巴巴数据技术及产品部 著. 背景及目的 数据对一个企业来说已 ...

  8. 数据质量管理有哪些方法

    数据质量管理是数据治理中的重要步骤.这是准备数据以符合质量标准(例如有效性,均匀性,准确性,一致性和完整性)的过程.数据质量管理可从数据集中删除不需要的,重复的和不正确的数据,从而帮助分析师获得更加准 ...

  9. 数据治理:数据质量管理策略!

    数据质量管理包含正确定义数据标准,并采用正确的技术.投入合理的资源来管理数据质量.数据质量管理策略和技术的应用是一个比较广泛的范畴,它可以作用于数据质量管理的事前.事中.事后三个阶段. 数据质量管理应 ...

最新文章

  1. udhcp server端源码分析1--文件组织结构
  2. mvn命令安装jar包--转
  3. C++编程思想:继承与虚函数以及多态
  4. json-tree api_什么是JSON处理(JSON-P API)?
  5. 发布ASP.NET程序至IIS7
  6. 不推荐使用getResources()。getColor()[重复]
  7. 双系统下Mac可以这样卸载windows系统
  8. mysqldump: Got error: 145 解决方案
  9. 美图秀秀计算机教程,美图秀秀怎么抠图 美图秀秀抠图详细教程
  10. Kong 开源的服务网格Kuma爬过了K8S这座大山
  11. “联盟鱼”-国外广告联盟lead项目最新玩法介绍
  12. parted扩展磁盘分区(实践篇)
  13. WeDrivePlugin64_24.dll 引发win7系统不能进入桌面
  14. 用友加密服务器修改密码,用户密码怎么修改?
  15. 《深入理解JAVA虚拟机》周志明 第三版 - 第四章 虚拟机性能监控、故障处理工具
  16. 人工神经网络 :模糊神经网络
  17. python词云图代码示例 无jieba_Python爬虫入门-jieba库制作词云图
  18. PotPlayer不支持S/W HEVC(H.265)解码的解决办法
  19. 时间戳转换,在线转换时间戳
  20. 数据仓库面试题整理(一)

热门文章

  1. Elasticsearch实战(十三)---聚合搜索Aggs聚合及Count,Avg操作
  2. 工业控制系统协议相关的安全问题
  3. 厌倦了996模式?来看看国内995制度的公司!
  4. 阿里云OSS服务器上传图片并获取路径(SpringBoot)(☆)
  5. lisp语言画地物符号_LISP语言在CAD工程制图中的应用_谢威
  6. 校招信息可以看哪些网站
  7. 金蝶EAS开发笔记(理论篇)
  8. CSS选择器补充,CSS三大特性以及字体、文本样式。
  9. 小米路由器4C R4CM 原厂BootLoader和eeprom备份
  10. wps表格宏被禁用如何解禁_(wps表格怎么设置宏)为什么每次打开excel文件都要提示启用或者禁用宏?...