5

我有一个看起来像这样的数据文件:

    1            2          3        4             5            6    
FirstName1 | LastName1 | 4224423 | Address1 | PhoneNumber1 | 1/1/1980
FirstName2 | LastName2 | 4008933 | Address1 | PhoneNumber1 | 1/1/1980
FirstName3 | LastName3 | 2344327 | Address1 | PhoneNumber1 | 1/1/1980
FirstName4 | LastName4 | 5998943 | Address1 | PhoneNumber1 | 1/1/1980
FirstName5 | LastName5 | 9854531 | Address1 | PhoneNumber1 | 1/1/1980

我的数据库有 2 个表,一个用于PERSON,一个用于ADDRESS,所以我需要在 PERSON中存储第 1、2、3 和 6列,在 ADDRESS 中存储第4 和 5列。SQL Loader 文档中提供的所有示例都解决了这种情况,但仅适用于固定大小的列,并且我的数据文件是用竖线分隔的(并且不能将其放入 2 个不同的数据文件中)。

有人知道该怎么做吗?

一如既往的帮助将不胜感激。

4

3 回答 3

3

另一种选择可能是将文件设置为外部表,然后运行插入,从外部表中选择所需的列。

于 2010-11-06T03:20:28.010 回答
1
options(skip=1)
load data
infile "csv file path"
insert into table person
fields terminated by ','
optionally enclosed by '"'
trialling nullcols(1,2,3,6)

insert into table address
fields terminated by ','
optionally enclosed by '"'
trialling nullcols(4,5)
于 2015-02-01T06:36:30.647 回答
0

即使 SQLLoader 不支持这一点(我不确定),也没有什么能阻止您使用 awk 对其进行预处理然后加载。例如:

cat 1.dat | awk -F '|' '{print $1 $2 $3 $6}' > person.dat
cat 1.dat | awk -F '|' '{print $4 $5}' > address.dat
于 2010-11-06T02:37:48.763 回答