Office中国论坛/Access中国论坛
标题:
【原创】bulk insert 关于FirstRow作用不可靠的问题
[打印本页]
作者:
faunus
时间:
2014-2-26 08:58
标题:
【原创】bulk insert 关于FirstRow作用不可靠的问题
代码:
BULK INSERT inssum
FROM 'logFile',
WITH (
CODEPAGE = 'RAW',
FIRSTROW = 2,
LASTROW = 4,
MAXERRORS = 2,
DataFileType='char',
FieldTerminator='|',
RowTerminator='|/r/n',
BATCHSIZE= 1,
TABLOCK
)
数据(1):
H|515800Rcords|
B|000000001|001|90101000|1|162926.81|0.00|0|0|0|
B|000000002|001|90101000|1|162926.81|0.00|0|0|0|
B|000000003|001|90102000|1|18200.00|0.00|0|0|0|
B|000000004|001|90201000|1|0.00|0.00|0|0|0|
B|000000005|001|90101000|1|162926.81|0.00|0|0|0|
....
入库数据(1)
B 000000002 ...
B 000000003 ...
B 000000004 ...
入库数据(希望得到的结果)
B 000000001 ...
B 000000002 ...
B 000000003 ...
如果不打算忽略掉首行, 有没有很好的办法,包括先对源文件进行预处理,但要求效率很高,
因为记录数量是千万级的。
1)bulk insert导入大文件,受到内存的限制,
测试足够的不同大小的文件,
一直读到内存不够,
加上内存又可以继续,
而其间,除个加时点CPU很高,
大部分情况下,cpu并不高,
而内存是不断平稳上升。
2)读入“行”、“列”的机制:(也是针对本问题最重要的一点)
涉及:FieldTerminator,RowTerminator,目标表的记录数!!
把Field、Row看成同一种情况,
而把“行”看成一种普通的分隔,问题就非常容易理解了,
bulk insert的机制是先“极大满足当前”的“行”或“字段”,
而且是遂个地按照顺序地进行分解:
FieldTerminator,FieldTerminator,共n个...,RowTerminator
周而复始。
推荐一个测试方法,把目标表的最后一个字段定义为超长,
然后缩减某些行的字段数,可以发现,总是会影响到二行(或多行并一行)。
结论是:
当列数大于目标表字段数,剩于字段并入最后字段(如最后字段不够在会出错)
当列数等于目标表字段数,正常
当列数小于目标表字段数,最近几行字段数加总正好小于目标表字段数的行并为同一行。
3)OPENROWSET的作用:
解决临时性一次读入非本地数据来源。
4)FORMATFILE
能调整字段的对应
作者:
faunus
时间:
2014-2-28 08:58
如此可以下定论了,充分测试了bulk insert得到以下一些结果:
1)首先回答一下yueyeli 的问题:
sql2000对表的行数同样不会有限制,
超过一定行数不行是其它各种制约因素造成的,
我几首只用过2005,
目前单表有3.8亿条记录,
没有问题。
2)bulk insert导入大文件,受到内存的限制,
测试足够的不同大小的文件,
一直读到内存不够,
加上内存又可以继续,
而其间,除个加时点CPU很高,
大部分情况下,cpu并不高,
而内存是不断平稳上升。
3)读入“行”、“列”的机制:(也是针对本问题最重要的一点)
涉及:FieldTerminator,RowTerminator,目标表的记录数!!
把Field、Row看成同一种情况,
而把“行”看成一种普通的分隔,问题就非常容易理解了,
bulk insert的机制是先“极大满足当前”的“行”或“字段”,
而且是遂个地按照顺序地进行分解:
FieldTerminator,FieldTerminator,共n个...,RowTerminator
周而复始。
推荐一个测试方法,把目标表的最后一个字段定义为超长,
然后缩减某些行的字段数,可以发现,总是会影响到二行(或多行并一行)。
结论是:
当列数大于目标表字段数,剩于字段并入最后字段(如最后字段不够在会出错)
当列数等于目标表字段数,正常
当列数小于目标表字段数,最近几行字段数加总正好小于目标表字段数的行并为同一行。
4)OPENROWSET的作用:
解决临时性一次读入非本地数据来源。
5)FORMATFILE
能调整字段的对应
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3