在没有任何外部库的情况下在c#中执行简单的SSIS样式的数据流

时间:2012-01-06 20:58:28

标签: c# ssis rhino-etl

我正在寻找C#中简单数据流的示例,而不依赖于SSIS或外部库,如Rhino-ETL(这是一个非常好的库,BTW)。

要求:

  • 一个任意ADO .Net数据源
  • 一个任意ADO .Net数据目的地
  • 不需要立即将整个数据集加载到内存中,以便它可以处理任意大的数据集。它需要依赖某种类型的缓冲区,或者像Rhino ETL那样利用“回报率”。
  • 使用批量插入(即SqlBulkCopy)
  • 最小的转变。没有查找,没有合并连接。
  • 如果单线程可以完成工作,则不需要多线程。

另一种陈述问题的方式...... Rhino ETL如何做到这一点,但没有所有的抽象和继承类,没有嘎嘎作词典?我想在一个简单的非抽象类中看到它。

又一个问题的重新描述:我正在寻找获取“选择”查询的数据流输出的基本示例,并将其一次大量插入10,000或50,000条记录到目的地而不加载整个结果进入内存,可能会超出可用RAM。

2 个答案:

答案 0 :(得分:1)

看起来您想了解etl程序如何工作以增加您的编程知识。 Rhino ETL是一个开源项目,所以你可以在这里获得源代码:

https://github.com/ayende/rhino-etl

并确切了解他们是如何做到的。还有其他开源的ETL包,因此您可以看到他们以不同方式执行操作的方式。例如,talend源可以在以下位置找到:

http://www.talend.com/resources/source-code.php

当然,如果您尝试编写自己的代码用于商业用途,您将不希望看到其他人的源代码,因此您需要自己提出自己的流程。

希望这能帮到你!

答案 1 :(得分:1)

恐怕不是一个完整的答案。

您可以使用此处列出的一种或多种技术在.Net中“分页”任意选择查询的结果。

http://msdn.microsoft.com/en-us/library/ff650700.aspx

这应该允许您对数据进行分块并避免RAM问题。

或者 - 如果您现有的SSIS包很简单/类似,那么可以考虑根据模板自动生成SSIS包。例如,我使用EISAPI API for SSIS维护100多个由c#小应用程序自动生成的软件包。