我们在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] 部分就可以不用了。
相关推荐
然而,在实际操作中,开发者经常遇到一个问题,那就是ListView的数据重复显示,以及Item的ID错乱问题。这两个问题可能会严重影响用户体验,甚至导致程序逻辑错误。下面我们将深入探讨这个问题,并提供有效的解决策略...
这里我们将深入探讨两种原生JS方法来实现这个功能,主要针对字符串中的重复字符。 首先,我们来看第一种方法:使用Set数据结构。Set是ES6引入的一种新的数据结构,它的一个重要特性就是所有元素都是唯一的,不允许...
1.4.1版本可能提供了清晰的接口供外部调用,例如添加数据、检查重复、删除重复等方法。 总之,"重复数据删除技术源代码C语言"是一个涉及数据结构、哈希算法、比较逻辑和性能优化的复杂工程。通过深入分析和理解...
这里我们将深入探讨数据重复的概念、重要性以及通用的去除重复数据的算法。 数据重复是指在数据集中存在完全或部分相同的记录。这种重复可能导致分析结果的偏差,浪费存储资源,并影响数据的质量。因此,确保数据集...
在 Excel 2021 中,删除重复数据项有多种方法,其中包括使用“高级筛选”功能和“删除重复项”按钮两种方法。 a. 使用“高级筛选”功能 在 Excel 2021 中,使用“高级筛选”功能可以删除重复数据项。首先,选择...
- **实际应用**:Avamar结合使用这两种方法,以最大化数据消除的效果。 **4. 确定逻辑数据段** - **逻辑划分**:在数据被分割成物理片段之前,Avamar会先将其划分为逻辑数据段。 - **优化策略**:通过智能算法确定...
2. **定义重复性标准**:明确哪些字段是确定记录重复的关键因素。这可能包括唯一标识符(如身份证号、手机号)、关键属性(如姓名、地址)等。 3. **数据去重策略**:常见的去重策略有以下几种: - **基于哈希函数...
总结来说,Excel的数据验证功能通过自定义公式和出错警告,提供了一种有效的方法来检查和防止重复数据。它可以帮助确保数据的唯一性,提高工作效率,但同时也需要谨慎处理复制和粘贴操作,以维护数据验证的完整性。
在编程领域,尤其是在开发用户界面时,组合框(ComboBox)和列表框(ListBox)是两种常用的控件,用于展示和选择数据。它们在Windows应用程序、Web应用甚至移动应用中都有广泛应用。然而,当数据源包含重复条目时,...
本文档“行业文档-设计装置-一种基于消除重复记录的数据清洗平台设计方法.zip”着重探讨了如何设计一个高效的数据清洗平台,其核心目标是消除重复记录。消除重复记录是确保数据质量和准确性的重要步骤,因为重复的...
### 数据分析方法详解 #### 一、描述统计 **描述性统计**是数据分析的基础,它通过对数据进行简化的描述,帮助我们理解数据的基本特征。主要包括数据的集中趋势、离散趋势、偏度、峰度等方面。 1. **缺失值填充**...
2. 删除重复数据的方法:在识别出重复数据之后,通常有两种方法可以处理这些数据。第一种方法是删除重复项中除了一个之外的所有项,这可以通过编写一个带有DELETE语句的SQL查询来完成,该查询引用了用于识别重复项的...
为了确保车载伽玛能谱测量数据的准确性,文中介绍了两种仪器性能检查方法:仪器稳定性检查和仪器重复性检查。仪器稳定性检查主要是通过长时间连续测量,分析同一地点、同一条件下测得的数据稳定性。通过统计分析钍...
本主题聚焦于使用C#语言处理TXT文本文件中的重复数据问题,这对于优化存储空间,提高数据处理效率,以及确保数据分析的准确性具有显著意义。 C#是一种面向对象的编程语言,它提供了丰富的库和功能来处理文本数据。...
"ACCESS数据库检查字段是否重复源码"是一个常见的需求,尤其是在数据录入过程中,为了保证数据的准确性与唯一性,通常需要避免记录的重复。下面将详细解释这个主题以及如何实现。 在Access数据库中,我们可以通过...
总的来说,易语言数据库检查重复字段模块是一个实用的工具,它帮助开发者在数据录入阶段就能发现并处理重复数据,从而保证数据库的准确性和一致性。了解并掌握这种模块的实现原理和使用方法,对于从事数据库管理、...
例如,我们可以创建一个泛型方法,接受一个包含待去重数据的集合作为输入,利用枚举遍历这个集合,并将每个元素添加到一个HashSet中,HashSet在插入时会自动检查并排除重复项。由于HashSet的查找和插入操作具有O(1)...
本文介绍了一种PowerBuilder数据窗口多表更新的通用性方法,通过建立全局函数实现了单数据窗口的多表更新功能,极大地提高了代码的可重用性和可维护性。这种方法不仅简化了开发流程,还使得程序不受数据库表个数和...
本文将详细阐述两种客户端限制表单重复提交的方法,并结合Struts框架的Token机制进行深入理解。 ### 第一种方法:JavaScript设置标志变量 这种方法通过在JavaScript中定义一个标志变量`repeatSubmitFlag`来判断...
本文将详细介绍两种在ArcGIS中删除重复点的方法:一种是利用ArcGIS自带的扩展——Spatial ETL Tool,另一种则是直接使用ArcGIS内置的工具来实现。通过这两种不同的方法,用户可以根据自身需求和现有条件选择最适合...