zoukankan      html  css  js  c++  java
  • 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 ' '
    (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、在表中添加约束

  • 相关阅读:
    C++基础之预处理命令
    IOS编程之相机和相册
    NSNotificationCenter通知中心
    UIStoryboard
    IOS文件系统和数据的永久性存储
    IOS实用功能之截图(来自相册和拍照)
    ios学习笔记之block在ios开发中的应用
    [ios]ios-Demo4脱衣服/刮奖app-专业
    制作越狱版本的ipa文件
    IOS之表视图添加搜索栏
  • 原文地址:https://www.cnblogs.com/magmell/p/8855907.html
Copyright © 2011-2022 走看看