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.mzph.cn/news/144895.shtml

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

相关文章

oracle初步学习

先了解几个登录的方式 1.直接在cmd输入 sqlplus scott/tiger //登陆普通用户scott 2.输入sqlplus sys as sysdba 之后 紧接着让你输入口令&#xff0c;直接输入sys就行了 3.先输入sqlplus/nolog 在输入conn system/managerorcl 先在cmd窗口输入sqlplus/nolog &#x…

Linux输入设备应用编程(键盘,触摸屏,按键,鼠标)

目录 一 输入设备编程介绍 1.1 什么是输入设备呢&#xff1f; 1.2 什么是输入设备的应用编程&#xff1f; 1.3 input子系统 1.4 数据读取流程 1.5 应用程序如何解析数据 1.5.1 按键类事件&#xff1a; 1.5.2 相对位移事件 1.5.3 绝对位移事件 二 读取 struct input_e…

Swift爬虫程序

以下是一个简单的Swift爬虫程序&#xff0c;用于从前程无忧深圳地区招聘财务、会计的数据爬取数据&#xff1a; import Foundation import SwiftSoup// 创建一个请求对象&#xff0c;指定代理信息 var request URLRequest(url: URL(string: "https://www.51job.com/zh/c…

scipy实现单因素方差分析

经典例题 某校高二年级共有四个班&#xff0c;采用四种不同的教学方法进行数学教学&#xff0c;为了比较这四种教学法的效果是否存在明显的差异&#xff0c;期末统考后&#xff0c;从这四个班中各抽取 5 名考生的成绩&#xff0c;如下所示。 班级 一班 二班 三班 四班 …

LC142.环形链表II

/*** 题目链接&#xff1a;https://leetcode.cn/problems/linked-list-cycle-ii/* 使用 map集合来存储链表的结点&#xff0c;在每次添加节点的时候使用map.containsValue()方法进行判断&#xff0c;* 如果存在相同的节点&#xff0c;就说明有环&#xff0c;然后返回当前节点* …

【软件安装】Centos系统中安装docker容器(华为云HECS云耀服务器)

这篇文章&#xff0c;主要介绍Centos系统中安装docker容器&#xff08;华为云HECS云耀服务器&#xff09;。 目录 一、安装docker 1.1、卸载旧版本docker 1.2、更新repo镜像 1.3、安装依赖包 1.4、添加docker-ce镜像 1.5、安装docker-ce 1.6、查看docker安装版本 1.7、…

Maven介绍及仓库配置

目录 一.Maven 1.介绍 坐标 仓库 1&#xff09;中央仓库 2&#xff09;本地仓库 3&#xff09;私服 配置国内源 配置过程 二.Maven功能 2.项目构建 3.依赖管理 Maven Help插件 安装 ​使用 一.Maven 1.介绍 坐标 唯一的&#xff0c;通过以下代码的三个键值对确…

【AI视野·今日CV 计算机视觉论文速览 第277期】Fri, 27 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Fri, 27 Oct 2023 Totally 93 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers A Coarse-to-Fine Pseudo-Labeling (C2FPL) Framework for Unsupervised Video Anomaly Detection Authors Anas Al lahham…

微信小程序wxss定位/选择/查找元素的几种方式

wxss定位、选择、查找元素的几种方式与css类似&#xff0c;下面介绍常用的几种&#xff1a; 选择器样例样例描述.class.intro选择所有拥有 class"intro" 的组件#id#firstname选择拥有 id"firstname" 的组件elementview选择所有 view 组件element, element…

『Vscode 自定义折叠代码』

vscode 编辑器内部的代码折叠&#xff0c;都是规定好的代码块的&#xff0c;比较 死板。 假设我想将任意的代码&#xff0c;都全部折叠起来&#xff0c;该如何操作呢&#xff1f; 答案&#xff1a;#region 和 #endregion。 ✅ CSS / Less / Scss 代码中&#xff0c;示例如下&…

Spring-IoC与DI入门案例

IoC入门案例 IoC入门案例思路分析 管理什么&#xff1f;&#xff08;Service与Dao&#xff09;如何将被管理的对象告知IoC容器&#xff1f;&#xff08;配置&#xff09;被管理的对象交给IoC容器&#xff0c;如何获取到IoC容器&#xff1f;&#xff08;接口&#xff09;IoC容…

学习c#的第十五天

目录 C# 预处理器指令 C# 预处理器指令列表 #define 预处理器 条件指令 #warning 和 #error #region 和 #endregion #line #pragma C# 预处理器指令 预处理器指令指导编译器在实际编译开始之前对信息进行预处理。 所有的预处理器指令都是以 # 开始。且在一行上&#…

Python去除中文文本中的特殊字符

最近需要去除文本中的特殊字符&#xff0c;例如下面从pdf读取的文本&#xff0c;需要进行解析&#xff1a; 山东师范大学硕士学位论文\n13第三章基于粗-细粒度双层注意力的视频-文本跨模态检索\n3.1粗-细粒度并行注意力网络结构\n图3-1展示了粗-细粒度并行注意力(CFGPA)模型的…

Vue 组件的全局注册与组件的jsx实现方法

大部分情况下我们都会使用template来创建html&#xff0c;开发体验会更好&#xff0c;但并不是每个时候使用它来创建 html 都是最佳的&#xff0c;所以官方提供了接近原生构建html的render()函数&#xff0c;让开发者能够依据自己的情况选择更好的构建方式。 有些同学会问&…

tcpdump wireshark简单使用

tcpdump工作原理 tcpdump 是 Linux 系统中非常有用的网络工具&#xff0c;运行在用户态&#xff0c;本质上是通过调用 libpcap 库的各种 api 来实现数据包的抓取功能&#xff0c;利用内核中的 AF_PACKET 套接字&#xff0c;抓取网络接口中传输的网络包。查 看 tcpdump 的 手册…

JVM实战-JVM之类加载时机

目录 JVM实战-JVM之类加载时机1 主动引用2 被动引用 JVM实战-JVM之类加载时机 Java虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型&#xff0c;这个过程被称作虚拟机的类加载机…

JS 读取excel文件内容 和 将json数据导出excel文件

一、实现将json数据导出为excel文件 1、通过原生js实现 核心方法&#xff1a; function JSONToExcelConvertor(JSONData, FileName, title, filter) {if (!JSONData)return;//转化json为objectvar arrData typeof JSONData ! object ? JSON.parse(JSONData) : JSONData;va…

STM32 LL库 TIM3定时器多通道捕获输入采集

为什么不用HAL库&#xff0c;使用HAL库捕获输入一个通道还尚可&#xff0c;多通道捕获由于HAL的回调函数不符合我的要求&#xff0c;干脆直接切换到LL库。网上找了许多&#xff0c;代码处理写的不符合我的要求&#xff0c;这里记录一下我的调试过程。 TIM2输出1路PWM信号&#…

Beautiful Soup爬取数据html xml

简介 Beautiful Soup是一个Python库&#xff0c;用于从HTML或XML文件中提取数据。 它提供了一种简单而灵活的方式来解析和遍历HTML或XML文档&#xff0c;并提供了一些有用的方法来提取所需的数据。 安装 pip install beautifulsoup4使用 导入库&#xff1a;在Python脚本的开…