快速将UTF8转换为UCS-2 / UTF-16以提供SSIS批量插入任务的方法

时间:2015-01-15 06:03:15

标签: sql-server powershell unicode utf-8 ssis

我目前的情况:

我正在使用 SSIS 2014 来加载每日 379个文件(来自 UTF8的AS400中的制表符分隔文件 20GB

我的SSIS流程如下: ssis flow

第一项任务是脚本任务:

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?

- 命令行应用程序(自己构建的控制台应用程序或任何开源?)

谢谢大家

2 个答案:

答案 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任务,如下所示: enter image description here

我只是将任务分成4个任务,每个任务和每个人都处理单独的文本文件集。