我目前的情况:
我正在使用 SSIS 2014 来加载每日 379个文件(来自 UTF8的AS400中的制表符分隔文件) 20GB 。
我的SSIS流程如下:
第一项任务是脚本任务:
string path= (string)Dts.Variables["dataPath"].Value;
string name = (string)Dts.Variables["fileName"].Value;
string from = Path.Combine(path, name) + ".tsv";
string to = Path.ChangeExtension(from, "txt");
Dts.Log("Starting "+to.ToUpper(),0,null);
using (StreamReader reader = new StreamReader(from, Encoding.UTF8, false, 1000000))
using (StreamWriter writer = new StreamWriter(to,false, Encoding.Unicode, 1000000))
{
while (reader.Peek() >= 0)
{
writer.WriteLine(reader.ReadLine());
}
}
我需要让这种流更快。我还没有优化的唯一部分是脚本转换为unicode ..
我尝试禁用此任务,并在批量插入任务中指定该文件是代码页650001,但是我收到服务器不支持此代码页的错误。显然,SSIS不会转换为utf8-> unicode,然后将其发送到SQL Server。
所以我坚持在批量插入之前转换文件的任务。
现在我正在寻找最快的方法。目前的方式很快,但我需要知道如何通过其他技术在这一步中获得性能:
-Powershell?
- 命令行应用程序(自己构建的控制台应用程序或任何开源?)
谢谢大家
答案 0 :(得分:1)
看看这是否比您当前的方法更快:
Get-Content $dataPath\$fileName.tsv -Encoding UTF8 -ReadCount 2000 |
Add-Content -Encoding Unicode $dataPath\$fileName.txt
答案 1 :(得分:1)
我尝试了powershell选项,它最好与我现有ssis设置的速度相匹配。这是一个加载,转换,批量插入到数据库中的任务。
我也试过一个控制台c#app,但它的速度并不快。
所以我最终修改了SSIS任务,如下所示:
我只是将任务分成4个任务,每个任务和每个人都处理单独的文本文件集。