Netezza使用SSIS从Sql server增加负载

时间:2013-05-23 03:59:03

标签: sql-server ssis netezza

我正在尝试使用SSIS从Sql server 2008到Netezza(Nps6)进行增量加载。 使用Netezza 5.x版OLEDB驱动程序。我在Table or View - Fast Load使用Maximum insert commit size = 0选项。

这里我试图将几千条记录插入到Netezza表中。此目标表包含数百万条记录。此数据流任务需要一个小时才能完成。当我查看Netezza管理员活动查询时,我发现下面的查询是问题,

SELECT * FROM Destination_Table;

下一步是外部表加载,如下所示

insert into "destination_table"(col1, col2, col3)
select c0, c1, c2 from external '/dev/null' (c0, c1, c2) using ( 
    remotesource odbc' delimiter ' ' escapechar '\' ctrlchars 'yes' crinstring 'yes' timeroundnanos 'yes' encoding 'internal' maxerrors 1
) ;

任何人都可以帮助我理解为什么加载需要SELECT * FROM目标表。或者Netezza OLEDB驱动程序如何与SSIS协同工作。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果未在OLE DB目标组件中为数据访问模式选择Table or View -fast load选项,则不会查看程序包中的详细信息。快速加载选项将在内部使用BULK INSERT将数据上载到目标表中。

Fast Load Option

使用Table or view的行为类似于SELECT *并提取所有列。仅当您需要从源到目标的表或视图的所有列时,才应使用此访问模式。

您遇到的问题是默认情况下此选项可能不会出现,因为您使用的是Netezza。

请参阅此处讨论的问题以及可能的解决方法:

http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/965b6d83-cf5e-405b-8784-7981e4386adc

此处提出的官方错误报告:

https://connect.microsoft.com/SQLServer/feedback/details/569087

答案 1 :(得分:1)

安装OLEDB 6.x版本之后,这个" SELECT * FROM DESTINATION TABLE"问题没有发生。我看到OLEDB 6版本的性能有了很好的提升。但是,如果我们正在开发OLEDB 5.x版本,我相信最好加载到舞台表然后加载到目标表