【问题标题】:Replacing SSIS Packages and ETL programs with .NET Console Applications (C# .NET)?用 .NET 控制台应用程序 (C# .NET) 替换 SSIS 包和 ETL 程序?
【发布时间】:2018-03-18 08:18:48
【问题描述】:

我想了解 Stack Overflow 成员根据他们的经验和理解对以下场景的想法。

我们得到 20-30 百万条记录作为输入(输入通常是 csv 或 xls 文件,如果有帮助,可以上传到 DB),我们需要处理这些记录并生成不同的文件,包括输出文件和错误文件.因此,基于某些业务逻辑,这些记录被移动到输出或错误文件中。

当前流程使用 SSIS 包和一些 ETL 工具来执行该任务。这些 pkgs 和 ETL 工具本身需要 5 到 15 分钟来处理,具体取决于输入大小。

有许多输入和 SSIS 包和 ETL 程序的数量。

我们想用一些 .NET 应用程序替换那些 SSIS pkgs 和 ETL 程序。 我们担心这些 .net 应用程序的速度和性能,因为 .net 中的 I/O 通常很慢。

或者有没有更好的方法来解决这个问题。

【问题讨论】:

  • 这个问题包含很多错误、谬误和神话。 .NET 中的 IO 慢?真的吗?缓慢的 IO 是由错误的代码、错误的查询和错误的架构引起的,而不是因为它是 .NET。 为什么你想离开 SSIS?您认为您可以复制相同的功能吗?包括监控和记录?包括流处理?为什么您认为控制台应用程序会更好实际要求是什么?

标签: c# sql-server performance ssis etl


【解决方案1】:

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

【讨论】:

  • 您不需要控制台应用程序即可运行 BULK INSERT。这就是bcp 工具的作用。至于速度,当你没有任何转换时它应该是一样的——在这种情况下,SSIS、BULK INSERT 和 bcp 做同样的工作
  • 是的,但是将它放在控制台应用程序中可以让您与其他逻辑进行协调。
【解决方案2】:

我个人更喜欢使用 SSIS,因为它可以轻松地向新人解释软件包的作用。

每次我使用 C# 组件/任务时,我几乎总是永远拥有这个包,我的目标是把开发的工作交给我,这样我就可以处理新的任务。

这可能是因为我在 BI 环境中,我们主要雇用数据库开发人员和报告编写者,以及我们通常专门从事 Web 开发的 .net 人员。

我真的自学了 C#,以便提取返回 XML 和 JSON 的 Web 服务。我发现通过转换为 c# 类与尝试使用 SSIS XML 源相比,数据被分页并且极其复杂,因此处理起来更容易。但是现在有了基础,我可以很快学会如何解决越来越多的问题。

话虽如此,我喜欢 SSIS 的信封,并在必要时使用脚本任务和组件,更快,有时甚至更简单。

【讨论】:

    【解决方案3】:

    虽然我的回答有点晚了,但我们过去也遇到过同样的问题:我们想离开 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      相关资源
      最近更新 更多