[转载] 数据测试常用的Data Profiling方法

现在对数据质量的要求越来越高,面对一个动辄上亿条数据的报表如何快速对它的数据质量做出分析呢?给大家分享下我们测试时用到的Data Profiling方法。

  Data Profiling,可以大概翻译“数据概要分析”,维基百科对Data Profiling的解释如下:Data profiling is the process of examining the data available in an existing data source and collecting statistics and information about that data,我的理解就是通过对数据自身统计值分析来反映出数据质量问题。

  日常工作中,我们拿到一个报表都会对每张表做Analyze,一方面是为了让优化器可以选择合适的执行计划,另一方面对于一些查询可以直接使用分析得到的统计信息返回结果,比如COUNT(*)。这个其实就是简单的Data Profiling。 Data Profiling其实是对报表各方面信息的一个收集统计信息的过程,然后根据收集到的信息对报表的数据情况做出判定,找到问题点从而更好保证数据质量。

  数据的统计信息除了基本的记录条数、最大值、最小值、最大长度、最小长度、唯一值个数、NULL值个数、平均数和中位数、针对字段的枚举和分布频率外,还包括相关性分析、主键相关分析和血缘分析等,将之分别做了一下分类如下图:

  下面对它们分别进行详细介绍:

  值域分析:

  对于所有字段都适合,分析字段的值是否满足指定阀值、分析字段值的统计量(最大、最小、中位数、均值、方差等)

  常见BUG:最大、最小值越界、发现有NULL值;

  基数分析:

  分析字段中不同值的个数,这种方法更适合于维度类指标

  常见BUG: 对于度量类指标数据比较集中,基数下记录个数过大或过小等

  类型监测:

  分析字段真实值是否符合定义的数据类型 ,一般在数据预览时对数据内容做下评估

  数据分布:

  分析各个维度值在总体数据中分布情况,根据经验值能从总体上看出数据的质量情况

  常见BUG: 数据分布不符合预期;度量类指标数据过分集中,发现有NULL值过多

  波动监测:

  分析检测值在一定周期内的数值波动是否在指定阀值内,这个更多用在线上数据监控中,可分析检测值在一定周期内的数值波动是否在指定阀值内,如出现大幅波动需要关注。

  异常值监测:

  分析字段中是否包含异常数据,例如空、NULL,另外一些约定异常值的数据的数量

  常见BUG:col存在异常值,约定异常值数据过多,如-99,-1,NULL等

  功能相关性分析:

  分析字段或字段之间是否满足指定的业务规则,这个需要理解本表内字段间的业务逻辑关系,如pv>=uv

  常见BUG:字段间的业务逻辑未满足预期

  主键唯一性分析:

  分析表数据中主键是否唯一,这个非常重要,如果主键不唯一会给下游表的计算带来无穷的困扰。

  常见BUG:主键不唯一;主键为NULL

  表基础分析:

  分析表的基础统计量如分区、行数、大小,如果有对照表,最好参考对照表,如无对照表这个更多是靠经验值,分析此表的业务对于表的基础统计量是否符合预期进行判断。

  常见BUG:表基础统计量不符合预期

  外键分析:

  分析事实表中的外键是否都能在维表中关联到

  常见bug:表里的外键没有在对应维表中找到对应,外键本身为NULL或异常值

  血缘分析:

  分析表和字段的从数据源到当前表的血缘路径,以及血缘字段之间存在的关系是否满足,关注的数据的一致性以及表设计的合理性。

时间: 2024-10-08 10:34:49

[转载] 数据测试常用的Data Profiling方法的相关文章

数据测试常用的 Data Profiling 方法

现在对数据质量的要求越来越高,面对一个动辄上亿条数据的报表如何快速对它的数据质量做出分析呢?给大家分享下我们测试时用到的Data Profiling方法. Data Profiling,可以大概翻译"数据概要分析",维基百科对Data Profiling的解释如下:Data profiling is the process of examining the data available in an existing data source and collecting statisti

python常用数据类型内置方法介绍

熟练掌握python常用数据类型内置方法是每个初学者必须具备的内功. 一.整型 a = 100 a.xxx() class int(object): def bit_length(self): ##如果将某个整数用2进制表示,返回这个2进制所占bit位数. return 0 def conjugate(self, *args, **kwargs): ##共轭复数 @classmethod # known case def from_bytes(cls, bytes, byteorder, *ar

常用数据加密和解密方法

关键词:数据加密用哪种方式更好? ASP.NET(C#)常用数据加密和解密方法汇总  一.数据加密的概念 1.  基本概念 2.  基本功能 3.  加密形式 二. 数据加密的项目应用和学习 1.  媒体加密:DRM 2.  文件加密:文本加密.pdf.word 3.  数据加密:ASP.NET(C#)中的数据加密 4.  硬件加密:加密狗 三. 数据加密的发展趋势 四. 网络数据加密算法分类 1.  根本不考虑解密问题:MD5. 2.  私用密钥加密:DES.AES 3.  公用密钥加密:RS

ASP.NET(C#)常用数据加密和解密方法汇总

一.            数据加密的概念 1.  基本概念 2.  基本功能 3.  加密形式 二.            数据加密的项目应用和学习 1.  媒体加密:DRM 2.  文件加密:文本加密.pdf.word 3.  数据加密:ASP.NET(C#)中的数据加密 4.  硬件加密:加密狗 三.            数据加密的发展趋势 四.            网络数据加密算法分类 1.  根本不考虑解密问题:MD5. 2.  私用密钥加密:DES.AES 3.  公用密钥加密:

常用验证码的识别方法

此文已由作者杨杰授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 全自动区分计算机和人类的图灵测试(Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序.验证码的主要目的是强制人机交互来抵御机器自动化攻击,为了确保服务器系统的稳定和用户信息的安全,越来越多的网站采用了验证码技术.图片验证码是目前最常用

java中常用的包、类、以及包中常用的类、方法、属性-----io包

由于最近有需要,所以下面是我整理的在开发中常用的包.类.以及包中常用的类.方法.属性:有需要的看看 java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.math.*; java.sql.*; java.text.*; java.awt.*; javax.swing.*;   包名 接口 类 方法 属性 java.io.*; java.io.Serializable实现序列化 java.io.Buffe

Sublime Text 3 常用插件以及安装方法(转)

Sublime Text 3 常用插件以及安装方法(转) http://www.cnsecer.com/460.html 安装Sublime Text 3插件的方法: 朋友们,小站活着不容易,全靠广告费养着了,如果本文对你有帮助.麻烦动下手点下页面的广告吧,谢谢! 直接安装 安装Sublime text 2插件很方便,可以直接下载安装包解压缩到Packages目录(菜单->preferences->packages). 使用Package Control组件安装 也可以安装package co

Hibernate与数据库交互方式和Hibernate常用的几个方法

第一种,适合sql语言水平比较高的人用 HQL(Hibernate Query Language) 面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写):HQL中查的是对象而不是和表,并且支持多态:HQL主要通过Query来操作,Query的创建方式: Query q = session.createQuery(hql); eg: from Person from User user where user.name=:name from U

Java几种常用的实现排序方法

import java.util.Random; public class NumberSort{ /** * 私有构造方法,禁止实例化 */ private NumberSort(){ super(); } /** * 冒泡排序 * 比较相邻的元素.如果第一个比第二个大,就叫唤他们两个位置. * 对每一组相邻的元素作同样的工作,从开始的第一对到结束后的最后一对,这样剩下的最后一个应该是最大的数. * 针对所有元素重复以上操作,除了最后一个. * 持续对越来越少的数进行以上的操作,直到没有任何一