mysql多表合并为一张表
有人提出要将4张表合并成一张。数据量比较大,有4千万条数据。有很多重复数据,需要对某一列进行去重。
数据量太大的话,可以看我另外一篇:http://www.cnblogs.com/magmell/p/8941338.html
mysql:思路:
1、导出数据。select into outfile。
2、传输到要导入数据的服务器上。
3、创建一张新表,主键和约束等与那三张表一样。
4、LOAD DATA INFILE导入。利用replace参数进行覆盖达到去重的目的。
LOAD DATA INFILE '/backup/tbl_get.csv' replace INTO TABLE emob.tbl_new;
LOAD DATA INFILE '/backup/tbl_jue.csv' replace INTO TABLE emob.tbl_new;
LOAD DATA INFILE '/backup/tbl_ors.csv' replace INTO TABLE emob.tbl_new;
全部导入后,对其去重:
select * from tbl_new a
where a.imgi in
(select imgi from tbl_new group by imgi having count(imgi)>
1
);
oracle:
通过sqlldr工具导入:
1、创建一张表,表中不要有任何约束。
2、先写一个load_ora.ctl文件,内容:
unrecoverable #不产生日志
load data
infile '/usr/local/tbl_imsi2nu.csv'
append into table eyumob.tbl_new #oracle的replace参数是对表原有的数据全部清空,相当于truncate
fields terminated by '\t'
(imgi,"number",cff)
3、执行导入命令:
sqlldr SYSTEM/oracle control=/usr/local/load_ora.ctl log=~/load.log bad=~/soy.bad rows=100000 readsize=20971520 bindsize=20971520 PARALLEL=TRUE DIRECT=TRUE skip_index_maintenance=TRUE
DIRECT=TRUE:可能会导致一些问题,比如索引失效等。最好不要使用。
4、合并后对新表去重:
DELETE FROM eyumob.tbl_new t1 WHERE t1.ROWID <> (SELECT MIN (t2.ROWID) FROM eyumob.tbl_new t2 WHERE t1.imgi = t2.imgi);
5、在表中添加约束