大量数据去重方案

2017-03-24  本文已影响0人  samYau

数据库中有有一张表专门存储用户的维度数据,由于随着时间的推移,用户的维度数据也可能发生变化,故每一次查看都会保存一次记录。
现在需要对数据按用户分析,但当中有大量的重复数据,仅用数据库的等值去重明显不可行。

对数据内容求MD5值

根据MD5值的特点,对每条记录的维度数据内容计算MD5值,然后根据MD5值判断重复记录。

    def main(self):
        for (credit_report_third_id,user_id,report_json) in self.get_records(1000):
            try:
                m2 = hashlib.md5()   
                m2.update(report_json.encode('utf-8'))   
                md5value = m2.hexdigest()
                self.insert_to_db(credit_report_third_id,user_id,md5value)
            except Exception as e:
                raise

对数据入库之后利用sql直接查出重复数据,然后将重复数据移除或者标记。

        SELECT
            credit_report_third_id
        FROM
             credit_report_third_md5 as  a
        WHERE
            EXISTS (
                SELECT
                    1
                FROM
                    credit_report_third_md5 as b
                WHERE
                    a.user_id = b.user_id
                AND a.md5value = b.md5value
                AND a.credit_report_third_id > b.credit_report_third_id
            )

在查看重复数据同时,出现几个大量重复的值,通过查看原始内容发现为:

md5值 实际内容
4067f33047d9b56d0046d8141c783e68 {"errorCode":"0","errorDescription":"报告不存在,请稍后再试","successful":"0"}
372c04fa8482595762c0ec496964284c {"result":0,"message":"查询成功","matches":[]}

后面可直接对该值另外处理提升效率。

上一篇 下一篇

猜你喜欢

热点阅读