1

我正在尝试数数。执行 bcp 导入时发生的截断错误。我尝试了一个简单的逻辑,在该逻辑中我重定向 bcp 的输出,然后right truncation在该文件中 grep。以下是代码片段:

bcp Test..Table in datafile.txt -f format_file -m 0 -S server -T > error_file.txt
error_count=`cat error_file.txt | grep -c ".*right truncation.*" `

问题是grep当有很多行时需要太多时间,而且即使没有右截断错误也需要更多时间。有没有更好的方法呢?我bcp在 windows 下使用实用程序cygwin并将其导入到MS SQL server 2008.

4

2 回答 2

1

您将在这里获得的最大加速是将所有内容连接在一起。即,您将拥有以下命令,而不是您的命令:

error_count=$(bcp Test..Table in datafile.txt-f format_file -m 0 -S server -T | fgrep -c "right truncation")

(以上内容包括已经建议的从您的正则表达式中删除“.*”并使用的更改fgrep。)

这样可以避免将某些内容写入磁盘,然后再次读取所有内容以搜索您的right truncation.

最后一点:我认为您在帖子中包含的命令缺少空格(datafile.txt-f)?

于 2013-09-19T15:52:07.630 回答
0

我研究bcp并发现-e直接在错误日志文件中写入任何错误并直接从该日志中获取它们的开关可以显着提高性能。

这是命令中 bcp 的输出:

Starting copy...
1000 rows sent to SQL Server. Total sent: 1000
1000 rows sent to SQL Server. Total sent: 2000
1000 rows sent to SQL Server. Total sent: 3000
1000 rows sent to SQL Server. Total sent: 4000
1000 rows sent to SQL Server. Total sent: 5000
1000 rows sent to SQL Server. Total sent: 6000
1000 rows sent to SQL Server. Total sent: 7000
1000 rows sent to SQL Server. Total sent: 8000
1000 rows sent to SQL Server. Total sent: 9000
1000 rows sent to SQL Server. Total sent: 10000
1000 rows sent to SQL Server. Total sent: 11000
1000 rows sent to SQL Server. Total sent: 12000
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 11 for SQL Server]String data, right truncation

12406 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 1351   Average : (9182.8 rows per sec.)

[INFO BCP IN: data2.txt] Import failed for 1 rows out of 12407 rows, Total 0.0%.

Fri Sep 20 01:24:39 CDT 2013

[INFO BCP IN: data2.txt] Total time elapsed 0 days 0 hour 0 minutes 2 seconds

这是错误日志输出:

#@ Row 12407, Column 1: String data, right truncation @#
The Bulk Copy Program (BCP) is a command-line utility

因此,将代码修改为 grep 错误日志文件而不是 bcp in 的整个输出,我们可以获得非常好的性能提升:

bcp Test..Table in datafile.txt -f format_file -m 0 -S server -T -e error_file.txt
error_count=`fgrep -c "right truncation" error_file.txt `

fedorqui、TrueY 和 pgl 感谢您的建议。

于 2013-09-21T08:33:26.190 回答