计算 Redshift 表中存在的重复行数的更快方法是啥

Posted

技术标签:

【中文标题】计算 Redshift 表中存在的重复行数的更快方法是啥【英文标题】:What is the faster way to calculate number of duplicate rows present in Redshift Table计算 Redshift 表中存在的重复行数的更快方法是什么 【发布时间】:2017-08-22 12:11:26 【问题描述】:

表中有数百万条记录。并且需要在 Redshift 中计算我的表中存在的重复行数。我可以通过使用以下查询来实现它,

select 
    sum(cnt) from (select <primary_key>
    , count(*)-1 as cnt 
from 
    table_name 
group by 
    <primary_key> having count(*)>1
    有没有更快的方法来达到同样的效果? 有没有办法在不使用子查询的情况下在单个查询中实现这一点?

谢谢。

【问题讨论】:

如何定义“重复行”?是否所有列都需要重复,或者是否有一列包含可以更轻松识别重复的唯一键? 【参考方案1】:

您可以尝试以下查询:

SELECT Column_name, COUNT(*) Count_Duplicate
FROM Table_name
 GROUP BY Column_name
 HAVING COUNT(*) > 1
 ORDER BY COUNT(*) DESC 

【讨论】:

【参考方案2】:

如果重复的标准只是重复主键那么

SELECT count(1)-count(distinct &lt;primary_key&gt;) FROM your_table

会起作用,除非您在 Redshift 中将您的列指定为主键(它不会强制约束,但如果您将列标记为主键 count(distinct &lt;primary_key&gt;) 将返回与 count(1) 相同的值 即使此列中有重复值

【讨论】:

以上是关于计算 Redshift 表中存在的重复行数的更快方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

比 wc -l 更快、更精确地计算行数的方法

如何捕获插入到包含标识列的 Redshift 表中的行数?

为啥我计算行数的原始查询总是返回 -1?

MySql 的行数并插入到计数的表中

如果 Redshift 中存在表,则从表中删除行,否则忽略删除

如何在 python 中从 redshift 更快地处理数据?