大数据技术之数据质量管理

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 欢迎采纳

第1章数据质量
1.1 概述
数据质量的高低代表了该数据满足数据消费者期望的程度,这种程度基于他们对数据的使用预期,只有达到数据的使用预期才能给予管理层正确的决策参考。数据质量管理作为数据仓库的一个重要模块,主要可以分为数据的健康标准量化、监控和保障。
1.2. 数据质量标准分类
① 数据完整性: 数据不存在大量的缺失值、不缺少某一日期/部门/地点等部分维度的数据,同时在ETL过程当中应保证数据的完整不丢失。验证数据时总数应符合正常规律时间推移,记录数总数的增长符合正常的趋势。
② 数据一致性: 数仓各层的数据,应与上一层保持数据一致,最终经过数据清洗转化(ETL)的宽表/指标能和数据源保持一致。
1.3 数据质量管理解决方案
本文通过Shell命令和Hive脚本的方式,通过验证增量数据的记录数、全表空值记录数、全表记录数是否在合理的范围之内,以及验证数据来源表和目标表一致性,确定当日的数据是否符合健康标准,达到数据质量的监控与管理。
第2章 ODS层数据校验
2.1 数据校验通用脚本
通过shell脚本调用hive,检验当日分区增加的记录数量和全表记录数量是否在合理的范围之内,同时检验关键字段为空的记录的记录数量。
1)创建数据检查脚本文件夹,用于存放数据校验shell脚本
[bigdata@hadoop102 module]$ mkdir -p data_check/sh
[bigdata@ hadoop102 sh]$ pwd
/opt/module/data_check/sh
2)在Hive中创建表数据质量校验记录表,记录数据校验的各个指标:
[bigdata@bigdata 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 '表空值记录数',
total_count bigint comment '全表记录数'
);
hive (datacheck)>quit;
3)在路径/opt/module/data_check/sh下创建数据检验增量表通用shell脚本
[bigdata@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;

执行当日增量数据记录数量SQL查询语句

add_count_query_result=hive -e "select count(*) from gmall.$table_name where dt='$do_date'"

取出当日增量数据记录数量

add_count=${add_count_query_result:3}

执行当日全表数据记录数量SQL查询语句

total_count_query_result=hive -e "select count(*) from gmall.$table_name"

取出当日全量数据记录数量

total_count=${total_count_query_result:3}

执行全表空值数据记录数量SQL查询语句

table_null_query_result=hive -e "select count(*) from gmall.$table_name $null_where_sql_str"

取出全表空值数据记录数量

null_count=${table_null_query_result:3}

将所有数据检验结果插入到表中

hive -e "insert into datacheck.table_count_add_standard values('$do_date','gmall','$table_name','increment_table',$add_count,$null_count,'$total_count')"
脚本参数注释:
第一个参数:传入时间分区参数( dt )
第二个参数:需要进行数据校验的表名( table_name )
第三个参数:需要判断是否为空值的字段名称用逗号‘ ,’隔开,例如:col1,col2,col3
给脚本/opt/module/data_check/sh/increment_data_check_public.sh赋权限:
[bigdata@hadoop102 sh]$ chmod 777 increment_data_check_public.sh
脚本执行示例:
[bigdata@hadoop102 sh]$
./increment_data_check_public.sh 2020-06-14 ods_activity_rule id,activity_id
4)在路径/opt/module/data_check/sh下创建数据检验全量表通用shell脚本
[bigdata@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}

执行全表空值数据记录数量SQL查询语句

table_null_query_result=hive -e "select count(*) from gmall.$table_name $null_where_sql_str"

取出全表空值数据记录数量

null_count=${table_null_query_result:3}

将所有数据检验结果插入到表中

hive -e "insert into datacheck.table_count_add_standard values('$do_date','gmall','$table_name','total_table',null,$null_count,'$table_count')"
脚本参数注释:
第一个参数:传入数据校验日期( dt )
第二个参数:需要进行数据校验的表名( table_name )
第三个参数:需要判断是否为空值的字段名称用逗号’ , ‘隔开,例如:col1,col2,col3
给脚本/opt/module/data_check/sh/total_data_check_public.sh赋权限:
[bigdata@hadoop102 sh]$ chmod 777 total_data_check_public.sh
脚本执行示例:
[bigdata@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)

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

[bigdata@bigdata sh]$ pwd
/opt/module/data_check/sh
[bigdata@bigdata sh]$ vim ods_data_check.sh
在脚本中编写如下内容:

!/bin/bash

data_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_time
2)给脚本/opt/module/data_check/sh/ods_data_check.sh赋权限:
[bigdata@bigdata 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 '数据目标表全表记录数'

);
hive (datacheck)>quit;
2)在路径/opt/module/data_check/sh下创建dwd层数据一致性检验通用shell脚本
[bigdata@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++)) do
if [ $i -eq 0 ];then

    join_on_sql_str=" on $source_table_name.${source_column_array[i]}=$target_table_name.${target_column_array[i]} "

else

    join_on_sql_str="$join_on_sql_str and $source_table_name.${source_column_array[i]}=$target_table_name.${target_column_array[i]} "

fi
done;

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}

将所有数据检验结果插入到表中

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')"
脚本参数注释:
第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赋权限:
[bigdata@hadoop102 sh]$ chmod 777 table_consistent_check_public.sh
脚本执行示例:
[bigdata@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'
数据检查脚本:
[bigdata@hadoop102 sh]$ pwd
/opt/module/data_check/sh
[bigdata@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'
数据检查脚本:
[bigdata@hadoop102 sh]$ pwd
/opt/module/data_check/sh
[bigdata@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'
数据检查脚本:
[bigdata@hadoop102 sh]$ pwd
/opt/module/data_check/sh
[bigdata@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'
数据检查脚本:
[bigdata@hadoop102 sh]$ pwd
/opt/module/data_check/sh
[bigdata@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'
数据检查脚本:
[bigdata@hadoop102 sh]$ pwd
/opt/module/data_check/sh
[bigdata@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'
数据检查脚本:
[bigdata@hadoop102 sh]$ pwd
/opt/module/data_check/sh
[bigdata@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'
数据检查脚本:
[bigdata@hadoop102 sh]$ pwd
/opt/module/data_check/sh
[bigdata@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

  1. DWD层数据检查脚本

1)在路径/opt/module/data_check/sh下创建dwd层数据一致性检验shell脚本
[bigdata@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赋权限:
[bigdata@hadoop102 sh]$ chmod 777 dwd_data_check.sh
脚本执行示例:
[bigdata@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层数据检查脚本

[bigdata@bigdata sh]$ pwd
/opt/module/data_check/sh
[bigdata@bigdata sh]$ vim dws_data_check.sh
在脚本中编写如下内容:

!/bin/bash

data_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赋权限:
[bigdata@bigdata sh]$ chmod 777 dws_data_check.sh
3)执行/opt/module/data_check/sh/dws_data_check.sh,检验2020-06-14当日宽表数据质量。
[bigdata@bigdata sh]$ ./dws_data_check.sh 2020-16-14
第5章 DWT层数据校验
5.1 DWT层数据质量校验方法

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

5.2 宽表校验脚本

1. 数据校验涉及表
    设备主题宽表
    会员主题宽表
    商品主题宽表

活动主题宽表
地区主题宽表

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

[bigdata@bigdata sh]$ pwd
/opt/module/data_check/sh
[bigdata@bigdata sh]$ vim dwt_data_check.sh
在脚本中编写如下内容:

!/bin/bash

data_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赋权限:
[bigdata@bigdata sh]$ chmod 777 dwt_data_check.sh
3)执行/opt/module/data_check/sh/dwt_data_check.sh,检验2020-06-15当日宽表数据质量。
[bigdata@bigdata sh]$ ./dwt_data_check.sh 2020-16-15
第6章 ADS层数据校验

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

1)在Hive中创建表数据质量校验记录表,记录数据校验的各个指标:
[bigdata@bigdata 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;
3)在路径/opt/module/data_check/sh下创建数据检验增量表通用shell脚本
[bigdata@hadoop102 sh]$ vim ads_data_check.sh
在脚本中编写如下内容:

!/bin/bash

增量数据所在的日期分区

do_date=$1

hive -e "insert into datacheck.ads_table_data_check select

temp.data_date,
temp.database_name,
temp.table_name,
temp.column_name,
temp.healthy_value,
temp.new_mid_count,
temp.is_healthy

from (

select 
    "$do_date" as data_date,
    "gmall" as database_name,
    "ads_new_mid_count" as table_name,
    "new_mid_count" as column_name,
    "大于3" as healthy_value,
    new_mid_count,
    if(new_mid_count>3,1,0) as is_healthy
from gmall.ads_new_mid_count

) as temp
"
脚本参数注释:
第一个参数:传入时间分区参数( dt )
给脚本/opt/module/data_check/sh/ads_data_check.sh赋权限:
[bigdata@hadoop102 sh]$ chmod 777 ads_data_check.sh
脚本执行示例:
[bigdata@hadoop102 sh]$
./ads_data_check.sh 2020-06-14

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
29天前
|
人工智能 搜索推荐 算法
数据平台演进问题之数据库技术面临挑战如何解决
数据平台演进问题之数据库技术面临挑战如何解决
|
2月前
|
数据采集 监控 大数据
大数据时代的数据质量与数据治理策略
在大数据时代,高质量数据对驱动企业决策和创新至关重要。然而,数据量的爆炸式增长带来了数据质量挑战,如准确性、完整性和时效性问题。本文探讨了数据质量的定义、重要性及评估方法,并提出数据治理策略,包括建立治理体系、数据质量管理流程和生命周期管理。通过使用Apache Nifi等工具进行数据质量监控和问题修复,结合元数据管理和数据集成工具,企业可以提升数据质量,释放数据价值。数据治理需要全员参与和持续优化,以应对数据质量挑战并推动企业发展。
468 3
|
2月前
|
分布式计算 Hadoop 分布式数据库
Hadoop生态系统介绍(二)大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍
Hadoop生态系统介绍(二)大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍
118 2
|
2月前
|
数据采集 传感器 大数据
利用大数据进行精准农业:技术与挑战
【6月更文挑战第6天】大数据技术正变革农业,推动精准农业发展。通过实时收集农田数据(如土壤条件、作物生长情况),运用数据分析预测病虫害,优化生产管理。示例代码显示了如何使用Python进行产量预测。然而,数据质量、整合、农民技术接受度及隐私安全等问题挑战重重。需强化数据管理,统一标准,提升农民数字素养,并保障数据安全。随着技术进步,大数据在精准农业的应用将更加广泛,助力农业高效可持续发展。
58 0
|
9天前
|
消息中间件 监控 大数据
"探索Streaming技术:如何重塑大数据未来,实时处理引领数据价值即时转化新纪元"
【8月更文挑战第10天】信息技术高速发展,数据成为推动社会进步的关键。面对数据爆炸,高效实时处理成挑战。流处理(Streaming)技术应运而生,即时处理数据流,无需积累。应用于实时监控、日志分析等场景。例如,电商平台利用流处理分析用户行为,推送个性化推荐;智能交通系统预测拥堵。结合Apache Kafka和Flink,实现从数据收集到复杂流处理的全过程。流处理技术促进数据即时价值挖掘,与AI、云计算融合,引领大数据未来发展。
27 5
|
22天前
|
机器学习/深度学习 存储 分布式计算
驾驭数据洪流:大数据处理的技术与应用
大数据处理不仅是信息技术领域的一个热门话题,也是推动各行各业创新和发展的重要力量。随着技术的进步和社会需求的变化,大数据处理将继续发挥其核心作用,为企业创造更多的商业价值和社会贡献。未来,大数据处理将更加注重智能化、实时性和安全性,以应对不断增长的数据挑战。
|
21天前
|
传感器 大数据 数据处理
大数据处理中的流计算技术:实现实时数据处理与分析
【7月更文挑战第30天】随着分布式系统、云原生技术、数据安全与隐私保护技术的不断发展,流计算技术将在更多领域得到应用和推广,为大数据处理和分析提供更加高效、智能的解决方案。
|
1月前
|
分布式计算 大数据 Spark
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
《Spark大数据处理:技术、应用与性能优化》深入浅出介绍Spark核心,涵盖部署、实战与性能调优,适合初学者。作者基于微软和IBM经验,解析Spark工作机制,探讨BDAS生态,提供实践案例,助力快速掌握。书中亦讨论性能优化策略。[PDF下载链接](https://zhangfeidezhu.com/?p=347)。![Spark Web UI](https://img-blog.csdnimg.cn/direct/16aaadbb4e13410f8cb2727c3786cc9e.png#pic_center)
76 1
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
|
29天前
|
机器学习/深度学习 人工智能 数据可视化
大数据时代的数据可视化技术:趋势、挑战与未来展望
【7月更文挑战第22天】随着技术的不断进步和应用场景的不断拓展,数据可视化技术将在更多领域发挥更大的作用。未来,我们可以期待更加智能化、实时化、沉浸式和民主化的数据可视化解决方案的出现。同时,随着数据量的不断增加和数据类型的不断丰富,数据可视化技术也将面临更多的挑战和机遇。只有不断创新和优化技术才能满足日益增长的需求并推动数据可视化技术的持续发展。
|
29天前
|
人工智能 自然语言处理 数据管理
数据平台演进问题之自然语言处理技术在AI驱动的数据库中的作用是什么
数据平台演进问题之自然语言处理技术在AI驱动的数据库中的作用是什么

热门文章

最新文章