用.NET控制台应用程序(C# .NET)替换SSIS包和ETL程序?

4
我希望能够根据经验和理解,了解Stack Overflow成员对以下情境的看法。
我们获得20-30百万条记录作为输入(输入通常是csv或xls文件,并且可以上传到数据库),我们需要处理这些记录并生成不同的文件,其中包括输出文件和错误文件。因此,根据一些业务逻辑,这些记录被移动到输出或错误文件中。
目前,所采用的过程使用SSIS包和某些ETL工具来执行该任务。这些pkg和ETL工具本身需要5到15分钟才能处理,具体取决于输入大小。
有许多输入和许多SSIS包和ETL程序用于它们。
我们想要用某个.NET应用程序替换这些SSIS pkgs和ETL程序。我们关心这些.NET应用程序的速度和性能,因为通常在.NET中I/O很慢。
还有没有更好的方法来处理这个问题?

2
这个问题包含了很多错误、谬论和神话。在.NET中IO慢吗?真的吗?慢的IO是由于糟糕的代码、糟糕的查询和糟糕的模式,而不是因为它是.NET。你为什么想要远离SSIS?你认为你能复制相同的功能吗?包括监控和日志记录?包括流处理?你为什么认为控制台应用程序会更好?实际的需求是什么? - Panagiotis Kanavos
3个回答

3
我们已经用一个 .NET 控制台应用程序替换了最简单的 SSIS 包,该应用程序使用 BULKINSERT 导入数据。性能非常快。

1
你不需要一个控制台应用程序来运行BULK INSERT。这就是bcp工具所做的。至于速度,在没有任何转换的情况下应该是相同的 - 在这种情况下,SSIS、BULK INSERT和bcp都可以完成同样的工作。 - Panagiotis Kanavos
正确,但将其放入控制台应用程序中可以让您与其他逻辑协调。 - Tab Alleman

0

个人而言,我更喜欢使用SSIS,因为可以轻松向新手解释包的功能。

每次我使用C#组件/任务时,几乎总是自己拥有该包,并且我的目标是将开发工作交接出去,以便我可以处理新任务。

这可能是因为我在BI环境中工作,我们主要聘请数据库开发人员和报表编写人员,而我们通常拥有专门从事Web开发的.NET人员。

我真正学习C#是为了提取返回XML和JSON的Web服务。我发现将数据转换为C#类比尝试使用SSIS XML源更容易处理,因为数据是分页的且非常复杂。但是现在我已经掌握了基础知识,能够快速学习如何解决越来越多的问题。

所有这些都说了,我喜欢SSIS的框架,并在必要时、更快、甚至更简单时使用脚本任务和组件。


无论你花费时间在什么上,你会发现自己能够解决越来越多的问题。 - tnk479
@tnk479。我现在几乎不再使用SSIS了。几乎所有我使用的东西都是API相关的,而且都是用C#异步运行的。 - KeithL

0

虽然我的回答有点晚,但我们曾经遇到过相同的问题:我们想摆脱SSIS并使用C#代码进行整个ETL。但我们还想像在SSIS中那样拥有某种类型的数据流。我建议您使用nuget软件包ETLBox(https://etlbox.net),它基本上是SSIS的C#替代品。

例如,要将数据从CSV加载到数据库中,您需要执行以下操作:

定义CSV源

CSVSource sourceOrderData = new CSVSource("demodata.csv");

可选地定义一行转换:

RowTransformation<string[], Order> rowTrans = new RowTransformation<string[], Order>(
  row => new Order(row)
);    

定义目的地

DBDestination<Order> dest = new DBDestination<Order>("dbo.OrderTable");

将您的ETL数据管道链接在一起

sourceOrderData.LinkTo(rowTrans);
rowTrans.LinkTo(dest);

最后启动数据流程(异步)并等待所有数据加载完成。

source.Execute();
dest.Wait();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接