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



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

要求:

  • 一个任意ADO.Net数据源
  • 一个任意ADO.Net数据目的地
  • 不需要一次将整个数据集加载到内存中,这样它就可以处理任意大的数据集。它需要依赖某种缓冲区,或者像Rhino ETL那样的"收益回报"
  • 使用大容量插入(即SqlBulkCopy)
  • 最小变换。没有查找,没有合并联接
  • 如果单线程可以完成此工作,则不需要多线程

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

还有另一个问题的改写:我正在寻找一个基本的例子,即获取"选择"查询的数据流输出,并一次以10000或50000条记录的数量将其大容量插入目的地,而不将整个结果加载到内存中,这可能会超过可用RAM。

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

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

以及他们是如何做到这一点的。还有其他的ETL包是开源的,所以你可以看到他们做事情的方式不同。例如,talend源可以在以下位置找到:

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

当然,如果你试图编写自己的代码用于商业用途,你不想看到其他人的源代码,所以你需要自己制定流程。

希望这对你有帮助!

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

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

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

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

或者,如果您现有的SSIS包足够简单/相似,那么考虑一下基于模板自动生成SSIS包可能是值得的。例如,我正在维护100多个包,这些包是由一个小型c#应用程序使用用于SSIS的EzAPI API自动生成的。

最新更新