`

两种检查数据重复性的方法

阅读更多

 

我们在ETL测试过程中经常甚至是必须要检测某一批数据中的某些维度在表范围内是否重复。

 

本文就介绍两种检测数据重复的简单方法。

 

方法1

SQL

如果这些数据在数据库中,那完全简单而且OK。具体方法为:

 

select (sum(c)-count(c)) uniq
from (
    select count(1) c
    from   table_t
    group by col1,col2,....coln
) a

 如果结果为0,则说明对应的维度上满足唯一性要求。

 

方法2:

Linux命令法

有时候,我们得到一个体积较大的数据文件(从数据仓库导出做别用),想要检查这个文件中的某些个字段维度上是否满足唯一性要求。当然,我们可以将这个文件导回到数据库,然后再写上面的SQL语句搞定。但是这样做难免小题大作了。因为,我们的需求很简单,而且由于数据文件较大,搞到数据库里对存储、计算、资源维护都是一种浪费。

 

现在分量中情况处理:

(1)数据待检查维度上有序:

我们可以通过如下命令来解决这个问题:

 

cut -d "[分隔符]" -f [你需要的维度] [你的数据文件] | uniq -c | grep -v -e '^ \+1 ' | wc -l

 

上面的方法,采用最粗暴的遍历文件方法搞定,同样也是最简单的,比其导入数据库,分配额外存储空间,建立索引,SQL查询计算等来讲简直是太简单了。

 

而且单从SQL与linux command执行效率来讲,SQL中的group by效率不见得比Linux command高。

 

如果我们需要统计所有维度上有无重复数据,则更简便,方法为:

 

 

uniq -c [你的数据文件] | grep -v -e '^ \+1 ' | wc -l

 

一个实际示例:

一个千万级的数据文件进行维度唯一性检查时,在我的台式机上安装的虚拟机上(哈哈,性能够差的)执行大概需要10秒左右的样子。

 

(2)数据待检查维度上无序:

面对这样的数据,uniq要想发挥作用,则必须在uniq之前进行sort,而对于大数据来讲sort是不可行的。

因为无论如何sort也需要nlogn的时间复杂度才能OK,而接着uniq也需要n的复杂度。而且,sort需要将全部数据读入内存。

 

由于数据无序,此时最优的方法就是扫描一遍数据得出结果。这需要借助我们上一篇博文中介绍的awk的方法完成,不过我们不需要计算sum值。

 

代码稍作修改,count.awk 文件如下:

 

 

BEGIN{
}
{
    if($0 in count){
        count[$0]+=1;
    }
    else{
        count[$0] =1;
    }
}
END{
    for(x in count){
        print count[x]:"x";
    }
}

 

此时,借助count.awk的功能,实现方案为:

 

 

grep -v -e '^$' [你的文件] | cut -d "[分隔符]" -f [维度] | awk -f count.awk | grep -v -e '^1:' | wc -l

 

首先去除空行,然后选取需要检查的维度,传入count.awk文件中统计维度上数据出现的次数,最后计算出现不止一次的数据又多少个。

 

如果结果为0,则说明检查维度上数据唯一,否则不唯一。

 

 

例如,一个文件为:

a,b,c

a,c,e

a,b,e

a,c,f

a,d,g

a,e,g

 

运行上述命令检查前两个维度上是否有重复,结果为:

2   --a,b和a,c分别都出现了两次。

 

如果检查全部维度上的唯一性,则上述命令中的 [cut] 部分就可以不用了。

 

2
1
分享到:
评论

相关推荐

    灰分测定精密度检查方法对比研究

    针对本厂惯用的平行样测定灰分检查精密度与国标规定的重复性测定灰分检查精密度两种方法的试验结果进行了观察统计,并利用成对数据对比法对试验结果进行了分析,结果表明,在95%概率下两种测定方法无显著性差异。

    统计学方法与数据分析(上下册)

    8.6另一种非参数方法:Kruskal-Wallis检验 8.7小结 重要公式 补充练习 第九章多重比较 9.1引言和案例 9.2线性对照 9.3控制哪个错误率 9.4Fisher(费舍尔)最小显著差异法 9.5Tukey的W方法 9.6Student-Newman-...

    数据分析数据挖掘的步骤.pdf

    对采集的样本 数据的特征规律进⾏分析,以了解数据的规律和趋势,为数据挖掘的后续环节提供⽀持 特征分析的⽅法 分布分析 分布分析能揭⽰数据的分布特征和分布类型,有定量数据的分布分析和定性数据的分布分析两种⽅...

    真实和模拟环境中用于列车安全定位的GNSS重复性测试方法

    用于ATO的GNSS接收器基于在预定环境条件下对定位功能的性能要求,这两种模拟包括标准测试定义在内的实际测试程序将使人们有可能在公认的铁路运营环境中检查GNSS性能的可重复性。 在此基础上,测试结果将给出被测GNSS...

    基于大数据平台的数据治理思路.doc

    数据的分类可以为系统间的数据分布提供依据,减少不一致和冗 余,以便于数据共享,减少数据重复录入、存储和加工。 2.3 数据治理的重要事项 (1)争取领导和相关部门的支持 数据治理计划失败的根源通常是缺少与业务...

    RFID数据流近似去重

    然而,有这样一种情况,即在时间间隔小于或等于τ时相同标签被探测到的RFID数据产生,找到一个非重复的RFID数据流就是混乱的。例如,一个RFID数据流S= {S1,S2,S3},其中S1 =(tag1,loc1,5),S2 =(tag 1,loc 1...

    DES数据加密

    这又分为两种方式:对称密钥算法和非对称密钥算法。所谓对称密钥算法就是加密解密都使用相同的密钥,非对称密钥算法就是加密解密使用不同的密钥。非常著名的pgp公钥加密以及rsa加密方法都是非对称加密算法。加密密钥...

    论文研究 - 在临床上很紧的Ham绳肌个体中,使用柔性直尺评估活动膝关节伸直过程中腰椎骨盆曲率的测量可靠性:二级分析

    这项研究的主要目的是在我们先前研究的二级分析中研究两种方法的最小重复次数,会话间可靠性和考官间可靠性。 当AKEiS期间27名临床上紧绷的绳肌患者的膝盖达到10°屈曲时,使用柔性标尺测量腰椎骨盆弯曲度,然后...

    Java泛型:概念、用法与优势

    通过使用泛型类、泛型方法以及通配符,我们可以处理多种数据类型而无需重复编写代码,并且在编译时进行类型检查,避免了运行时的类型错误。 在本文中,我们简要介绍了Java泛型的概念,并通过实例和代码详细解释了...

    论文研究 - 外伤性脑损伤和脑血管意外:Rasch分析在医院康复后检查残疾和结果差异方面的应用

    这项研究的目的是证明Rasch分析的应用,以鉴定由颅脑损伤(TBI)和脑血管意外(CVA)导致的残疾状况... Rasch分析确定了两种不同的损伤模式。 CVA参与者表现出局灶性损害的缺陷特征,而TBI组表现出弥散性损害的缺陷。

    计算机二级C语言考试题预测

    使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑 B. 模块只有一个入口,可以有多个出口 C. 注重提高程序的执行效率 D. 不使用goto语句 (5) 下面概念中,不属于面向对象方法的是 (D) 注:P55-58 A....

    论文研究 - 触觉-超声探头的宫颈表征

    背景:过早的宫颈软化和缩短... 发现在孕妇的相同子宫颈扇形处两次测量之间的类内相关系数计算得出的测量重复性对于宫颈弹性而言为0.97,对于宫颈长度而言为0.93。 95%的一致性限制为:1)颈椎弹性从?22.4%至+ 14

    计算机二级公共基础知识

    在下列两种情况下也只能采用顺序查找: ①如果线性表为无序表,则不管是顺序存储结构还是链式存储结构,只能用顺序查找; ②即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。 1.7.2 二分法查找 二分法...

    大数据预处理技术.pdf

    ⽐如age="42"Birthday="03/07/1997" ⽽我们在使⽤数据过程中对数据有如下要求: ⼀致性、准确性、完整性、时效性、可信性、可解释性 由于获得的数据规模太过庞⼤,数据不完整、重复、杂乱,在⼀个完整的数据挖掘过程...

    金属材料标准的应用数据库MtrRvw

    3.2 显示试验特征的窗体有两种类型。一种是“专用窗体”,适用热处理工艺检查、化学分析和机械性能试验,通常每一种试验方法都有一个对应的窗体; 另一种是“Miscellaneous”窗体,适用其它检查、测试和试验,包括...

    C#全能速查宝典

    1.4.30 Matches方法——检查字符串是否有重复的词出现 71 1.4.31 MONTH函数——返回指定日期中月部分的整数 73 1.4.32 PadLeft方法——在左边用空格填充 73 1.4.33 PadRight方法——在右边用空格填充 74 1.4.34 ...

    颜色分类leetcode-dsc-generating-data:dsc生成数据

    在这种情况下,重点不是像我们之前看到的那样回答一些分析问题,而是测试一些机器学习假设,例如,比较两种不同的算法,看看哪一种算法的准确性更高。 在这种情况下,分析师通常会处理他们自己生成的合成随机数据。 ...

    北京中科信软spss培训时间序列分析

    2.逐步、前进、后退三种筛选方法的含义与操作用法、分析结果的解读 3.各种常用模型诊断工具(分类图等)的操作使用 4.加权最小二乘法、两阶段最小二乘法的原理、操作和结果阅读 5.最优尺度回归的功能和操作 6....

    java 面试题 总结

    Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来...

Global site tag (gtag.js) - Google Analytics