mysql导入csv格式数据
首先从oracle中导出数据,采用工具sqluldr2,sqluldr2是一款Oracle数据快速导出工具,包含32、64位程序,sqluldr2在大数据量导出方面速度超快,能导出亿级数据为excel文件,另外它的导出速度也是非常快速,功能是将数据以TXT/CSV等格式导出。
1、先下载工具sqluldr2.zip,解压。
在windows下我们使用sqluldr264.exe,输入cmd,进入dos界面
C:\zhanglinwang\soft\sqluldr2\sqluldr264.exe USER=wireless/密码@wuxian_qy QUERY="select /*+ parallel(2) */ * from userlog" table=userlog head=yes charset=utf8 FILE=C:\zhanglinwang\userlog.csv
说明:USER=wireless/密码@wuxian_qy,以为我本地配置有数据库的监听,所以写了监听的名字wuxian_qy,也可以直接写成USER=wireless/密码@10.xx.xx.xx/test (数据库ip/数据库名称)
2、导入到mysql中
mysql -h127.0.0.1 -uhive -phive
mysql> show variables like 'sql_mode';
+---------------+----------------------------------------------------------------+
| Variable_name | Value |
+---------------+----------------------------------------------------------------+
| sql_mode | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+----------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> set sql_mode='';
Query OK, 0 rows affected (0.00 sec)
mysql> load data infile "C:\zhanglinwang\userlog.csv"
mysql> into table CUSTOMINFO
mysql> CHARACTER SET utf8
mysql> fields terminated by ','
mysql> LINES TERMINATED BY '\r\n'
mysql> IGNORE 1 LINES;
-----------------------------------------------
重点说明:如果字段中有换行,导出就需要设置一些参数,否则会产生多余的行
比如导出以#号分割,如果有换行,就会产生多余的行,如下图:
导入到数据库中就产生多余的记录
这时我们在导出的时候,就需要设置一些参数,处理换行
导出数据:
sqluldr264.exe USER=yw_omsm/[email protected]_omsm QUERY="select /*+ parallel(2) */ t.oid,t.maintainno,t.maintainsource,t.description,t.processdesc from t_maintain t;" table=t_maintain head=yes field=0x23 escape='\' escf=0x0a esct=n FILE=F:\software\数据库\sqluldr2\t_maintain.txt
没有换行了
再导入到mysql中
load data local infile "F:/software/数据库/sqluldr2/t_maintain.txt"
into table t_maintain
CHARACTER SET gbk
fields terminated by '#'
IGNORE 1 LINES;
数据库表也正常了