hive数仓-数据的质量管理

版本20231116 要理解数据的质量管理,应具备hive数据仓库的相关知识

文章目录

    • 1.理解什么是数据的质量管理:
    • 2.数据质量管理的规划
      • 数据质量标准的分类
    • 3.数据质量管理解决方案
      • 1.ods层的数据质量校验
        • 1)首先在hive上建立一个仓库,添加数据质量监控表
        • 2)然后建立检查检查表
        • 3)创建数据检验曾量表通用的脚本
        • 4)创建数据检测全量表的脚本
        • 5)脚本的运行
      • 2.dwd层的数据质量校验
        • 1)建立dwd层校验表
        • 2)编写数据检测脚本
      • 3.dws-dwt层数据校验
      • 4.ads层数据校验
        • 1)建立ads校验表
        • 2)编写数据检测脚本

1.理解什么是数据的质量管理:

数据的质量管理,表现保障在数据的健康性,即满足消费者期望程度,体现在他们对数据的使用预期,只有达到预期才能满足决策层的参考。

大数据大而价值密度低,在有效信息数据挖掘上,可能会出现错误,在这个基础上,分析师会对数据有一个预期分数,如果他觉得数据的准确率在百分之八十以上就算是满足需求。
我们对数据的质量控制达到了这个标准,就算达到了数据的质量要求。

2.数据质量管理的规划

数据的质量管理作为数据仓库的一个重要模快,主要可以分为数据的健康标准量化,监控和保障。

数据质量标准的分类

1)数据的完整性
数据不存在大量的缺失值,不缺少某一日期的/部门、地点等部分维度的数据。随时间的推移,数据量符合正常的趋势

2)数据的一致性
数据各层的数据应与上层保持一致,经过elt处理后的宽表和指标能与数据源保持一致

3)数据的不重复性
同一个数据集当中统一个数据不能出现多次,不能出现数据的大量冗余保证数据的唯一性

在这里插入图片描述

3.数据质量管理解决方案

使用shell命令和hive脚本的方式,通过验证增量数据的记录数,全表空值记录数,全表空值记录数,全表记录数是否在合理的范围之内,以及验证数据来源表和目标表的一致性,确定当日的数据是否符合健康标准,达到数据质量的检测和管理。

1.ods层的数据质量校验

1)首先在hive上建立一个仓库,添加数据质量监控表
create database datacheck;
2)然后建立检查检查表

create table datacheck.table_count_add_standard(
data_date string comment '数据时间分区',
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 '全表记录数'
)
3)创建数据检验曾量表通用的脚本
[lyc@hadoop102 check]$ vim increment_data_check_public.sh
#!/bin/bash
#增量数据所在的日期分区
check_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"fi
done
#执行当日增量数据记录数量sql查询语句; gmall 为数据仓库所在的库名
add_count_quary_result=`hive -e "select count(*) from gmall.$table_name where dt='$check_date'"`
#取出当日增量数据记录数量
add_count=${add_count_quary_result:3}
#执行当日全表数据记录数量的查询sql查询语句
total_count_quary=`hive -e "select count(*) from gmall.$table_name"`
#取出当日全量数据的记录数量
total_count=${total_count_quary:3}
#执行全表空值数据记录数sql查询语句
table_null_quary_result=`hive -e "select  count(*) from gmail.$table_name$null_where_sql_str"`
#取出全表空值数据记录数量
null_count=${table_null_quary_result:3}
#执行全表重复值的记录数量sql查询语句
table_duplicate_quary_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_quary_result:3}#将所有的数据检验结果插入表中
hive -e "insert into datacheck.table_count_add_standard values ('$check_date','gmall','$table_name','increment_table','$add_count','$null_count','duplicate_count','total_count')"

脚本参数注释:
第一个参数:传入时间分区参数(dt)
第二个参数:需要进行数据校验的表名(table_name)
第三个参数:为查询的字段名,用“,”号隔开。如 cl1,cl2,cl3

4)创建数据检测全量表的脚本

全量表的脚本相比于增量表的区别在于,不需要计算增量表的结果

[lyc@hadoop102 check]$ vim increment_data_check_public.sh
#!/bin/bash
#全量数据所在的日期
check_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"fi
done
#执行当日增量数据记录数量sql查询语句; gmall 为数据仓库所在的库名
#add_count_quary_result=`hive -e "select count(*) from gmall.$table_name where dt='$check_date'"`
#取出当日增量数据记录数量
#add_count=${add_count_quary_result:3}
#执行当日全表数据记录数量的查询sql查询语句
total_count_quary=`hive -e "select count(*) from gmall.$table_name"`
#取出当日全量数据的记录数量
total_count=${total_count_quary:3}
#执行全表空值数据记录数sql查询语句
table_null_quary_result=`hive -e "select  count(*) from gmail.$table_name$null_where_sql_str"`
#取出全表空值数据记录数量
null_count=${table_null_quary_result:3}
#执行全表重复值的记录数量sql查询语句
table_duplicate_quary_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_quary_result:3}#将所有的数据检验结果插入表中
hive -e "insert into datacheck.table_count_add_standard values ('$check_date','gmall','$table_name','total_table',null,'$null_count','duplicate_count','total_count')"
5)脚本的运行

单独一张表的脚本运行

[lyc@hadoop102 check]$ total_data_check_public.sh 2023-06-14 activity_rule id,activity_id

如果表多可以使用以下脚本

vim ods_data_check.sh
#!/bin/bash
check_date=$1/opt/module/check/total_data_check_public.sh $check_date ods_user_info  id,name,birthday,email/opt/module/check/total_data_check_public.sh $check_date ods_order_status_log  id,order_id,order_status,operater_time

2.dwd层的数据质量校验

dwd校验数据于ods需要考虑的差不多,主要增加了相较于ods数据的一致性,同时因为我们在ods层已经校验了数据的空值,所以只要保持数据的一致性,就可以从而验证控制值率

1)建立dwd层校验表
create table datacheck.dwd_table_data_check(
data_date string comment '数据时间分区',
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 '数据目标表重复记录数'
);
2)编写数据检测脚本
vim table_consistent_check_public.sh
#!/bin/bash
#全量数据所在的日期
check_date=$1
#校验数据源表的表名
source_table_name=$2
#需要校验控制的列名(与目标表顺序一致才能对比两个字段)
source_column=$3
#检查数据目标表的表名
target_table_name=$4
#检查数据目标表的字段
target_column=$5#初始化sql查询语句
join_on_sql_str=''
#将检验数据源表的字符切割成列名数组
source_column_array=({null_column//,/})
target_column_array=({null_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]}"fi
done
echo "----------ods-dwd 一致性检查--------------"
#执行数据源目标表和目标表关联的查询sql语句,产线数据一致的条数。
consistent_data_quary_result=`hive -e "select count(*) from gmall.$source_table_name join gmall.$target_table_name$join_on_sql_str"`
#取出全表一致查询的条数
consistent_data_count=${consistent_data_quary_result:3}
echo "----------ods层记录条数--------------"
#执行查询源表的记录条数
source_table_quary_result=`hive -e "select count(*) from gmall.$source_table_name"`
#取出全表数据源表的记录条数
source_table_count=${source_table_quary_result:3}echo "----------dwd层记录条数--------------"
#执行查询目标表记录条数sql查语句; gmall 为数据仓库所在的库名
target_table_quary_result=`hive -e "select count(*) from gmall.S$target_table_name"`
#取出全表数据目标表的记录条数
target_table_count=${target_table_quary_result:3}
#执行全表重复值的记录数量sql查询语句
table_duplicate_quary_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_quary_result:3}#将所有数据检验结果插入到表中
hive -e "insert into datacheck.dwd_table_data_check values('$check_date','gmall','$source_table_name','$source_column','$target_table_name','target_column','$consistent_data_count','$source_table_count','$target_table_count','$duplicate_count')"

3.dws-dwt层数据校验

dws层和dwt层已经进行了轻度聚合,不需要计算数据量前后的一致,依旧保持和ods相同的计算脚本就可以了

vim dws_data_check.sh
#!/bin/bash
check_date=$1/opt/module/check/total_data_check_public.sh $check_date dws_user_info  id,name,birthday,email/opt/module/check/total_data_check_public.sh $check_date dws_order_status_log  id,order_id,order_status,operater_time

4.ads层数据校验

因为ads层已经进行的高度的聚合,这一层的数据校验采用订制的方法来解决,来对每一个指标进行单独的测评

1)建立ads校验表
create table datacheck.ads_table_data_check(
data_date string comment '数据时间分区',
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不合理'
);
2)编写数据检测脚本
[lyc@hadoop102 check]$ vim ads_data_check_public.sh
#!/bin/bash
#增量数据所在的日期分区
check_date=$1
hive -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\"bigger then 300\" as healthy_value,new_mid_count,if(new_mid_count>300,1,0) as is_healthy   --校验数大约等于300为正确,否则错误from gmall.ads_new_mid_count)as temp"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/194823.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言——taxize(第二部分)

taxize&#xff08;第二部分&#xff09; 3. taxize 文档中译3.10. classification&#xff08;根据类群ID检索分类阶元层级&#xff09;示例1&#xff1a;传递单个ID值示例2&#xff1a;传递多个ID值示例3&#xff1a;传递单个名称示例4&#xff1a;传递多个名称示例5&#xf…

ubuntu 20通过docker安装onlyoffice,并配置https访问

目录 一、安装docker &#xff08;一&#xff09;更新包列表和安装依赖项 &#xff08;二&#xff09;添加Docker的官方GPG密钥 &#xff08;三&#xff09;添加Docker存储库 &#xff08;四&#xff09;安装Docker &#xff08;五&#xff09;启动Docker服务并设置它随系…

001 opencv addWeighted

目录 一、环境 二、addWeighted函数 三、代码演示 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、addWeighted函数 OpenCV中的cv.addWeighted函数是一个用于图像叠加的函数&#xff0c;它可以将两个具有相同尺寸和类型的图像按…

uniapp生成自定义(分享)图片并保存到相册

需求描述 在一个页面中底部有个保存图片的功能&#xff0c;点击能够保存一张生成的自定义表格图片。 第一眼见到这个需求 自己会出现了两个问题 如何去处理图片中的自定义内容以及样式如何将自定义内容转化成图片 至于保存图片&#xff0c;uniapp有对应的api去实现uni.saveIma…

【部署篇】Docker配置MySQL容器+远程连接

一、前言 上篇文章在部署nestjs时&#xff0c;由于docker访问不了主机的localhost&#xff0c;所以无法连接主机数据库。所以我们只能在docker中额外配置一个数据库&#xff0c;映射到主机上&#xff0c;然后可以通过ip地址访问。 在本篇文章我们会在docker中创建一个mysql&a…

Vue3源码reactive和readonly对象嵌套转换,及实现shallowReadonly

前言 官方文档中对reactive的描述&#xff1a; 响应式转换是“深层”的&#xff1a;它会影响到所有嵌套的属性。一个响应式对象也将深层地解包任何 ref 属性&#xff0c;同时保持响应性。 官方文档中对readonly的描述: 只读代理是深层的&#xff1a;对任何嵌套属性的访问都将是…

web:[BUUCTF 2018]Online Tool

题目 打开页面显示如下&#xff0c;进行代码审计 上述代码主要功能是接收‘host’参数&#xff0c;后使用nmap扫描主机端口 首先检查是否存在HTTP_X_FORWARDED_FOR头&#xff0c;若存在&#xff0c;将值赋值给EMOTE_ADDR,是为了跟踪用户真实的IP地址 后用检查get‘host’是否…

验证k8s中HPA功能及测试

部署 使用yaml部署服务 apiVersion: apps/v1 kind: Deployment metadata:name: php-apachenamespace: tools spec:replicas: 1selector:matchLabels:app: php-apachetemplate:metadata:labels:app: php-apachespec:containers:- name: php-apacheimage: registry.cn-beijing.…

Ubuntu18.04平台下Qt开发程序打包的一些问题总结

目录 前言 一、在Ubuntu18.04开发环境下打包有两种方式 1、利用linuxdeployqt软件进行打包 2、利用编写shell脚本的方式进行打包 二、详细介绍shell脚本打包的方式 1、新建一个空的文件夹 2、准备脚本copylib.sh 3、准备脚本xxxx.sh。 4、给上述两个脚本添加可执行权限…

Java虚拟机运行时数据区结构详解

Java虚拟机运行时数据区结构如图所示 程序计数器 程序计数器&#xff08;Program Counter Register&#xff09;是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。 多线程切换时&#xff0c;为了能恢复到正确的执行位置&#xff0c;每条线程…

计算机毕业设计选题推荐-二手交易跳蚤市场微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

通信原理板块——脉冲编码调制(PCM)

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、脉冲编码调制PCM原理 将模拟信号…

6.2 List和Set接口

1. List接口 List接口继承自Collection接口&#xff0c;List接口实例中允许存储重复的元素&#xff0c;所有的元素以线性方式进行存储。在程序中可以通过索引访问List接口实例中存储的元素。另外&#xff0c;List接口实例中存储的元素是有序的&#xff0c;即元素的存入顺序和取…

搭建成功simulink-stm32硬件在环开发环境

本次实验所使用的软件版本和硬件平台参数如下&#xff1a; Matlab版本: 2021b STM32硬件平台&#xff1a;YF_STM32_Alpha 1R4(参考自STM32 Nucleo F103RB官方开发板) YF_STM32_Alpha开发板 STM32 Nucleo F103RB 开发板 2.1 STM32硬件支持包下载 读者朋友平时使用的是和谐版M…

洗眼镜超声波清洗机用什么水清洗、小型超声波清洗机推荐

洗眼镜的超声波清洗机可以用清水清洗&#xff0c;因为超声波频率可以把眼镜缝隙中的脏污渍给振动出来&#xff0c;所以清水槽内放清水就可以了。像清洗一些机器零件的话&#xff0c;污渍比较重可以适当的家电清洁液进去清洗&#xff0c;这样清洗完的效果会比较好。戴眼镜的朋友…

Adobe家里的“3D“建模工 | Dimension

今天&#xff0c;我们来谈谈一款在Adobe系列中比肩C4D的高级3D软件的存在—— Dimension。 Adobe Dimension &#xff0c;其定位是一款与Photoshop以及Illustrator相搭配的3D绘图软件。 Adobe Dimensions与一般的3D绘图软件相较之下&#xff0c;在操作界面在功能上有点不大相同…

SDL2 播放音频数据(PCM)

1.简介 这里以常用的视频原始数据PCM数据为例&#xff0c;展示音频的播放。 SDL播放音频的流程如下&#xff1a; 初始化音频子系统&#xff1a;SDL_Init()。设置音频参数&#xff1a;SDL_AudioSpec。设置回调函数&#xff1a;SDL_AudioCallback。打开音频设备&#xff1a;SD…

NewStarCTF2023 Reverse Week3---Let‘s Go Wp

分析 程序打开后结合题目可以发现是 GO语言。 在GO语言中&#xff0c;main_init 要先于 main 函数运行。 在这里对一个iv做了处理。 用插件Signsrch发现AES加密 知道是AES后&#xff0c;就需要找密文&#xff0c;key和iv了。 密文应该就是前面的十六进制字符串。 key和i…

二百零三、Flume——Flume实时采集数据频率为1s的高频率Kafka数据直接写入ODS层表的HDFS文件路径下

一、目的 在离线数仓中&#xff0c;需要用Flume去采集Kafka中的数据&#xff0c;然后写入HDFS中。 由于每种数据类型的频率、数据大小、数据规模不同&#xff0c;因此每种数据的采集需要不同的Flume配置文件。玩了几天Flume&#xff0c;感觉Flume的使用难点就是配置文件 二、…

医疗项目的需求分析以及开发流程

一.项目的背景以及需求 1.项目背景 1.政策层面来看&#xff0c;近年来我国政府相关部门陆续颁发了支持数字医疗行业发展的相关政策&#xff0c;“互联网医疗”政策逐渐明确完善&#xff0c;为数字医疗行业发展提供支持&#xff0c;行业迎来政策福利期。 其次&#xff0c;从经济…