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

Fast way to convert UTF8 to UCS-2 / UTF-16 to feed SSIS Bulk insert task

我现在的情况:

我正在使用 SSIS 2014 以便每天加载 379 个文件(来自 AS400 的制表符分隔文件 UTF8 ) 占用 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 不会转换成 fly utf8->unicode 然后发送到 SQL 服务器。

所以我坚持在批量插入之前转换文件。

现在我正在寻找最快的方法。目前的方法很快,但我需要知道如何使用其他技术在此步骤中获得性能,例如:

-Powershell ?

-Command-line 应用程序(自己构建的控制台应用程序或任何 open-source?)

谢谢大家

看看这是否比您当前的方法更快:

Get-Content $dataPath$fileName.tsv -Encoding UTF8 -ReadCount 2000 |
 Add-Content -Encoding Unicode $dataPath$fileName.txt

我尝试了 powershell 选项,它的最佳状态与我现有 ssis 设置的速度相匹配。这是一个加载、转换、批量插入数据库的单一任务。

我还尝试了一个控制台 C# 应用程序,但它没有比 .

所以我最终修改了 SSIS 任务,如下所示:

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