hive数仓-数据的质量管理

news2024/10/7 12:17:48

版本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++)) 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查询语句; 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++)) 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查询语句; 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++)) 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_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 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
			\"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.coloradmin.cn/o/1217155.html

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

相关文章

pycharm2023关闭项目后一直显示正在关闭项目-解决办法

网上的很多教程都试了不行&#xff0c;直接用下面的方法有效解决。 点击 帮助--查找操作--输入Registry--点注册表&#xff0c;取消ide.await.scope.completion后的勾选即可。

目标检测—YOLO系列(二 ) 解读论文与复现代码YOLOv1 PyTorch

精读论文 前言 从这篇开始&#xff0c;我们将进入YOLO的学习。YOLO是目前比较流行的目标检测算法&#xff0c;速度快且结构简单&#xff0c;其他的目标检测算法如RCNN系列&#xff0c;以后有时间的话再介绍。 本文主要介绍的是YOLOV1&#xff0c;这是由以Joseph Redmon为首的…

博物馆信息展示预约小程序的效果如何

随着大环境放开&#xff0c;如博物馆等场所也开始了正常营业&#xff0c;而这些场所在市场中中的需求度很广&#xff0c;每天客流量也相对可观。 但依然发现博物馆痛点所在。 通过【雨科】平台搭建博物馆小程序展示所有内容信息&#xff0c;覆盖微信、百度、头条、抖音、支付宝…

Android 启动优化案例-WebView非预期初始化排查

作者&#xff1a;邹阿涛涛涛涛涛涛 去年年底做启动优化时&#xff0c;有个比较好玩的 case 给大家分享下&#xff0c;希望大家能从我的分享里 get 到我在做一些问题排查修复时是怎么看上去又low又土又高效的。 1. 现象 在我们使用 Perfetto 进行app 启动过程性能观测时&#…

9.程序的机器级代码表示,CISC和RISC

目录 一. x86汇遍语言基础&#xff08;Intel格式&#xff09; 二. AT&T格式汇编语言 三. 程序的机器级代码表示 &#xff08;1&#xff09;选择语句 &#xff08;2&#xff09;循环语句 &#xff08;3&#xff09;函数调用 1.函数调用命令 2.栈帧及其访问 3.栈帧的…

交换机堆叠 配置(H3C)堆叠中一台故障如何替换

交换机堆叠 配置&#xff08;H3C&#xff09;堆叠中一台故障如何替换 堆叠用来干什么&#xff1f;配置两台成员设备的 IRF&#xff08;堆叠&#xff09;Switch01配置Switch02配置 如何替换堆叠中坏掉的一台交换机 堆叠用来干什么&#xff1f; 一台交换机网口有限&#xff0c;无…

【Java 进阶篇】JQuery 遍历:发现元素的魔法之旅

欢迎来到 JQuery 的奇妙世界&#xff0c;一个充满活力和灵感的地方。在这个世界里&#xff0c;我们将一起探讨 JQuery 的遍历功能&#xff0c;这是一个让你轻松发现和操作网页元素的神奇工具。无需太多前端经验&#xff0c;只要有一颗探险的心&#xff0c;你就能在 JQuery 遍历…

yolo改进替换VanillaNet backbone

论文地址&#xff1a;https://arxiv.org/pdf/2305.12972.pdf 代码地址&#xff1a;GitHub - huawei-noah/VanillaNet VanillaNet简介 基础模型的核心是“更多不同”的哲学&#xff0c;计算机视觉和自然语言处理的惊人成功就是例证。 然而&#xff0c;优化的挑战和Transformer模…

矿区安全检查VR模拟仿真培训系统更全面、生动有效

矿山企业岗位基数大&#xff0c;生产过程中会持续有新入矿的施工人员及不定期接待的参观人员&#xff0c;下井安全须知培训需求量大。传统实景拍摄的视频剪辑表达方式有限&#xff0c;拍摄机位受限&#xff0c;难以生动表达安全须知的内容&#xff0c;且井下现场拍摄光线不理想…

Spring Boot 项目部署方案!打包 + Shell 脚本部署详解

文章目录 概要一 、profiles指定不同环境的配置二、maven-assembly-plugin打发布压缩包三、 分享shenniu_publish.sh程序启动工具四、linux上使用shenniu_publish.sh启动程序 概要 本篇和大家分享的是springboot打包并结合shell脚本命令部署&#xff0c;重点在分享一个shell程…

qnx 工程目录创建工具 addvariant

文章目录 前言一、addvariant 是什么二、addvariant 使用实例1. variant names 参数说明2. 创建一个可执行文件工程3. 创建一个动态库工程 总结参考资料 前言 本文主要介绍如何在qnx 开发环境中创建工程目录及其相关的配置文件(common.mk, Makefile 文件等) 软件版本&#xff…

第四代管网水位监测仪:管网水位监测仪效果怎么样?

随着我国城市化进程的推进&#xff0c;随之而来的是城市规模不断扩大&#xff0c;各类排水管网设施需要检查的范围也日益扩大。尽管市政管理部门已安排人员定期巡查&#xff0c;但仍无法对井下水位进行24小时实时监控。如遇管网阻塞、窨井满溢等情况&#xff0c;若不及时处理将…

(七)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB

一、五种算法&#xff08;DBO、LO、SWO、COA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启…

python 最快多长时间学完?

以下是一个为零基础学员制作Python速成学习计划。这个计划包括了一些基本的Python概念和技能&#xff0c;以及一些实用的学习技巧。 第1周&#xff1a;基础入门 Python简介&#xff1a;了解Python的历史、特点、应用领域。 安装Python&#xff1a;在你的电脑上安装Python&am…

【L2GD】: 无环局部梯度下降

文章链接&#xff1a;Federated Learning of a Mixture of Global and Local Models 发表期刊&#xff08;会议&#xff09;: ICLR 2021 Conference&#xff08;机器学习顶会&#xff09; 往期博客&#xff1a;FLMix: 联邦学习新范式——局部和全局的结合 目录 1.背景介绍2. …

赶快来!程序员接单必须知道的六大注意事项!!!

花花世界迷人眼&#xff0c;增加实力多搞钱&#xff01;对于咱程序员来说&#xff0c;搞钱的最好办法就是网上接单了&#xff0c;相信也有不少小伙伴已经在尝试了吧&#xff01;但是如何正确的搞钱呢&#xff1f;其中的注意事项你真的了解吗&#xff1f; 本期就和小编一起来看…

最佳实践-使用Github Actions来构建跨平台容器镜像

概述 GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台&#xff0c;可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求&#xff0c;或将合并的拉取请求部署到生产环境。 GitHub Actions 不仅仅是 DevOps&#xff0c;还允许您在存…

【云原生-Kurbernets篇】Kurbernets集群的调度策略

调度 一、Kurbernetes的list-watch机制1.1 list-watch机制简介1.2 创建pod的流程&#xff08;结合list-watch机制&#xff09; 二、Scheduler的调度策略2.1 简介2.2 预选策略&#xff08;predicate&#xff09;2.3 优选策略&#xff08;priorities&#xff09; 三、标签管理3.1…

C51--WiFi模块ESP8266--AT指令

ESP8266 面向物联网应用的&#xff0c;高性价比、高度集成的WiFi MCU 简介&#xff1a; 高度集成&#xff1a; ESP8266EX集成了32位Tensilica 处理器、标准数字外设接口、天线开关、射频balun、功率放大器、底噪放大器、过滤器和电源管理模块&#xff0c;可将所占的PCB空间降…

SDL2 播放音频(MP4)

1.简介 这里引入FFmpeg库&#xff0c;获取音频流数据&#xff0c;然后通过FFmpeg将视频流解码成pcm原始数据&#xff0c;再将pcm数据送入到SDL库中实现音频播放。 2.FFmpeg的操作流程 注册API&#xff1a;av_register_all()构建输入AVFormatContext上下文&#xff1a;avform…