sqlldr导入数据(以PostgreSql>>>Oracle为例)

1.在目标数据库中创建表

  1.1点击源表,复制创建语句

  1.2 修改数据类型以匹配目标数据库,如:

    字符串类型:character varying(20)>>>varchar2(20)

    数字类型:numeric(19,2)>>>number(19,2)

    时间戳:timestamp without time zone>>>timestamp或date

  1.3 其他

    一般字符串类型需要加长长度,不然有时会插不进去数据,不知为什么;

    P和O数据库的not null default * 语句位置刚好相反;

2.导出csv格式数据

  copy call to ‘/tmp/call.csv‘ DELIMITER ‘,‘ NULL ‘‘ CSV [QUOTE ‘"‘ FORCE QUOTE 跟这个表的所有列名]

这样就可以将数据导出了,需要注意的是:

  ①有时数据量较大会出现导出失败,如

解决办法:用select的方式导出

  ②[QUOTE ‘"‘ FORCE QUOTE 跟这个表的所有列名的数组形式]

    没用过,表示给每个列的数据都加上“”,在PostgreSql中,获取表的所有列名的数组形式的语句如下:

1  SELECT array_to_string(array(
2             select attname from pg_attribute where attrelid = ‘表名称‘ ::regclass and attnum > 0
3             and attisdropped = ‘f‘
4             ), ‘,‘) as name

  有兴趣可以试试。

3.下载csv文件

4.编辑*.ctl控制文件

 1 load data
 2 CHARACTERSET UTF8
 3 infile "/home/oracle/hthhf.csv"
 4 truncate
 5 into table t_yw_hthhf_old
 6 fields terminated by ","
 7 OPTIONALLY ENCLOSED BY ‘"‘
 8 trailing nullcols
 9 (
10   列名1 integer external ,
11   列名2 timestamp "YYYY-MM-DD hh24:mi:ss" ,
12   列名3,13   列名4 float  external
14 )

表示将/home/oracle/hthhf.csv的数据传入表t_yw_hthhf_old中,用逗号分割。需要注意的是下面括号中的部分,字符串型不加修饰,整型和浮点型分别加integer/float external,日期加timestamp "YYYY-MM-DD hh24:mi:ss"。

5.上传csv和ctl文件至目标服务器(略);

6.在目标服务器切换成oracle用户,并执行一下命令:

sqlldr userid=用户名/密码 control=ctl文件的全路径;

比如我上传到/home/oracle下了,则control=/home/oracle/hthhf.ctl

7.其他问题

导入后需要查看目标数据库,检查是否全部导入,如果数据不全,或在执行命令时异常,需要查看与ctl文件同目录下的log,与ctl同名,里面会记录错误原因。目前见过的错误有:字段中的内容含有换行或字段长度不够等等,依次解决即可。

时间: 2024-12-28 15:36:45

sqlldr导入数据(以PostgreSql>>>Oracle为例)的相关文章

oracle sqlldr导入数据

背景 900W数据的TXT文本,文件内容各字段以"|"分隔,使用nevicat导入太慢 解决办法 使用sqlldr导入数据, 1)建立配置文件test.ctl [[email protected] ~]$ cat test.ctlload datainfile 'data.txt' into table CMCCfields terminated by "|"(id,phone,service_id,time,cmcc_num,cmcc_s) 解释:data.txt

Oracle sqlldr导入导出txt数据文件详解

一.sqlldr导入txt 1.预备 a).txt文件 这里要保存成无签名的UTF-8 b).oracle建表 2.编写控制文件input_test.ctl LOAD DATA CHARACTERSET 'UTF8' --字符集设定 INFILE 'd:\input_test.txt' --要导入的文本数据路径,可写多个REPLACE into TABLE input_test --清空原有数据再导入方式 追加导入 用append into table t_namefields terminat

mysql导入数据到oracle中

mysql导入数据到oracle中. 建立Oracle表: CREATE TABLE "GG_USER" ( "USERID" VARCHAR2(255 BYTE) NOT NULL, "ISPART" VARCHAR2(255 BYTE) DEFAULT NULL, "ACTUALPOSITIONID" NUMBER(11) DEFAULT NULL, "BEGINWORKTIME" TIMESTAMP(

Oracle sqlldr导入之“MAXIMUM ERROR COUNT EXCEEDED”

昨天看到一个同事在通过PL/SQL Developer工具把文本数据往oracle表;有两个文本:一个有30万条记录:一个7万多条记录.在导入到过程中:出现错误记录还需要点击确认.不过使用黑科技(屏幕精灵)自动点击.单一个7万多记录的文本需要10分钟左右的时间. 看到这种情况:我热心肠爆发:我帮你来提快导入速度.我想到两种方案:    1:oracle的sqlldr命令    2:oracle的外部表:    由于文本存在错误记录:就选择1.    文本格式如下:存在有76760条记录 [[em

Oracle Data Pump 导出和导入数据

Data pump export/import(hereinafter referred to as Export/Import for ease of reading)是一种将元数据和数据导出到系统文件集/从系统文件集导入数据的服务端工具;导出的文件可以移动到其它服务器上,但只能使用impdp导入;使用前要先建立目录(directory)和授权: conn / as sysdba CREATE DIRECTORY PUMP_DIR AS '/u01/backup'; 创建后即可查询出目录信息,

Oracle 用中文作为关键字查询无数据及sql loader 导入数据时数据分隔异常的解决办法

前提:电脑A使用sqlldr向电脑B中的Oracle批量导入数据.数据分隔及查询都正常. 拷贝A中的源数据及ctl文件到电脑C中,拷贝B中的Oracle安装文件并安装至电脑C中. 电脑C使用ctl将源文件导入本机Oracle中之后发现.导入的数据分隔错误,比如[email protected]@ccc格式的数据,sqlldr导入的时候用@分隔.但是实际导入结果并不是column1=aaa,column2=bbb, column3=ccc:有部分数据变成了[email protected],[em

【原创】MySQL和PostgreSQL 导入数据对比

在虚拟机上测评了下MySQL 和 PostgreSQL 的各种LOAD FILE方式以及时间. 因为是虚拟机上的测评,所以时间只做参考,不要太较真, 看看就好了. MySQL 工具: 1. 自带mysqlimport工具. 2. 命令行 load data infile ... 3. 利用mysql-connector-python Driver来写的脚本. PostgreSQL 工具: 1. pgloader 第三方工具. 2. 命令行 copy ... from ... 3. 利用psyco

使用sqoop1.4.4从oracle导入数据到hive中错误记录及解决方案

在使用命令导数据过程中,出现如下错误 sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.29.16:1521/testdb --username NAME --passord PASS --verbose -m 1 --table T_USERINFO 错误1:File does not exist: hdfs://opt/sqoop-1.4.4/lib/commons-io-1.4.jar FileNotFoundEx

MySQL和PostgreSQL 导入数据对照

在虚拟机上測评了下MySQL 和 PostgreSQL 的各种LOAD FILE方式以及时间. 由于是虚拟机上的測评,所以时间仅仅做參考,不要太较真, 看看就好了.MySQL 工具:    1. 自带mysqlimport工具.    2. 命令行 load data infile ...    3. 利用mysql-connector-python Driver来写的脚本. PostgreSQL 工具:    1. pgloader 第三方工具.    2. 命令行 copy ... from