欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

如何比较存在数据库里两个批次的数据(百万条记录)

时间:2023-05-15
文章目录

前言一、失败的尝试

1.用sql developer直接导成insert文件比较2.用sql developer直接导成csv文件3.导出数据时用rownum 二、成功方案三、注意:


前言 比较存入同一张表的两个批次的数据。
批次号和登记时间列不需要比较。
数据记录百万级以上。
数据库是oracle数据库,连接工具sql developer。
没有专业的比较工具。
一、失败的尝试 1.用sql developer直接导成insert文件比较

文件太大。

2.用sql developer直接导成csv文件

比方案一生成的文件小,但是还是有10G以上。
用本地IDEA比较直接内存溢出。
上传服务器比较上传失败。

3.导出数据时用rownum

查询数据时,除用批次号做匹配条件外,再加上rownum <10000,并按列排序。但是查询出来的数据并不一致。不知道rownum是否不能和其他条件并用或者不能和order by并用。

二、成功方案

假设该表有ABCDEFGH列。

select A,B,C from 表名 where 批次号='……' order by A,B,C,D,E,F,G,H

分别将两个批次的查询结果导出成csv文件,上传linux服务器用diff比较。
然后再执行下面命令

select D,E,F,G,H from 表名 where 批次号='……' order by A,B,C,D,E,F,G,H

再将生成的文件送上服务器用diff比较。

三、注意:

不知道是不是上传服务器大小做了什么限制,我将批次1生成的文件上传服务器后再上传批次2的文件时就出错。将查询列的字段减小后,文件变得更小后就可以上传。
所以不要以为第一个文件能上传成功,第二个文件就一定可以上传成功。可以先用distinct看下有没有列是同一个值的,如果有的话这些列就人工检查下,不要select成文件比较了,在数据量大的时候少比较一列能使文件大小缩小很多。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。