栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录

前言一、失败的尝试

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成文件比较了,在数据量大的时候少比较一列能使文件大小缩小很多。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/741728.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号