如何使用SSIS处理“大数据”或“大数据”?

时间:2013-10-29 19:57:13

标签: sql-server sql-server-2005 ssis data-warehouse etl

我正在运行动态查询,通常最初会返回HUGE(300MB - 1GB)结果集。后来,它不应该是这么大(虽然不确定),因为我将使用delta加载。然后将这些结果集加载到C#数据表中。脚本循环遍历这些行,然后生成查询(存储在SSIS变量中)以将它们加载到适当的目标列(由其他脚本确定)。

对于小结果集,我的包运行正常。但是,对于大的,它只是由于内存不足错误而失败。 我该如何解决这个问题?你能提出一些策略吗?我想我一次可以获取较小的数据部分,然后加载到目标中。不知道如何去做。有没有这方面的食谱?

简要介绍该过程的工作原理 -

Execute SQL: Get big ResultSet > Script:RowReader: Read each row 
and generate a String SQL like "Insert INTO TableABC VALUES" + {all 
columns of 1 row here}. Then, concatenate SQL to a String destinationInsert > 
Execute SQL: execute SQL inside String destinationInsert. 

ETL过程完成。这有帮助吗?

1 个答案:

答案 0 :(得分:4)

由于T-SQL是一种适当的编程语言,因此可以使用它做很多事情。如果您提到的“脚本”不涉及繁重的I / O或远程通信,则可以在SQL中重写它。

数据通常是逐行处理的,这可以通过一个语句(UPDATE ...)来完成。所以无论如何你都可以在服务器内做你想做的事。

但我们假设脚本太复杂,无法在SQL中编写代码。好吧,然后在C#中编写代码将程序集添加到SQL-Server中。您的C#代码可以作为CLR功能访问,因此您可以在不中断内存的情况下完成所有操作。编辑:哎呀,你正在使用SQL-2005。不是100%肯定你是否可以添加.NET程序集...正如Gary Walker指出的那样,SQL 2005支持CLR。Thx,Gary。

如果您与我们分享您的脚本或至少其基本功能,我相信我们可以为您找到快速简便的解决方案。