我们正在考虑使用SSIS来维护PostgreSql数据仓库。我之前在SQL Server之间使用它没有任何问题,但是很难让它与Postgres很好地配合使用。我正在使用OLEDB PGNP数据提供程序的评估版本(http://www.postgresql.org/about/news.1004)。
我想从事实表上的UPSERT开始(每天更新/插入10k-15k行),但事实证明这非常困难(更不用说我将来会想要使用代理键)
我尝试过(http://blogs.msdn.com/b/mattm/archive/2008/11/22/lookup-pattern-upsert.aspx)和(http://consultingblogs.emc.com/jamiethomson/archive/2006/09/12/SSIS_3A00_-Checking-if-a-row-exists-and-if-it-does_2C00_-has-it-changed.aspx)实际上是相同的(除了我在尝试插入时我最终都不理解结合)但是使用OLEDb命令进行更新时,我遇到了与参数相同的问题 - 我试图用(http://technet.microsoft.com/en-us/library/ms141773.aspx)克服这个问题,但这似乎不起作用,我得到验证错误 -
complent ....的外部列与数据源列不同步...需要从外部列中删除外部列“Param_2”。 (对于前两个参数也会重复此错误 - 使用sql连接时从未遇到过此错误,因为它支持命名参数)
有没有人遇到过这个?
和
事实上,这个简单的任务在SSIS中显然很难做到,这表明我正在使用错误的工具来完成工作 - 是否有更好的(并且仍然灵活)这样做?或者另一个ETL包可以更好地在两个Postgres数据库之间使用吗? - 其他选项包括(http://en.wikipedia.org/wiki/Extract,_transform,_load#Open-source_ETL_frameworks)上列出的任何选项。我可以去写一堆SQL来为我做这个,但我想要一个简洁易用的解决方案。
答案 0 :(得分:0)
我已经使用了Slowly Changing Dimension向导,取得了很好的成功。它可能会为您提供您正在寻找的内容,特别是使用向导
http://msdn.microsoft.com/en-us/library/ms141715.aspx
外部列不同步:SSIS区分大小写 - 我多次遇到此问题,这让我想脱掉头发。
这个简单的任务要么采取一些方法。 SSIS绝不是企业级ETL产品,但它确实为您提供了一些快速简便的功能,并且足以支持大多数ETL工作。我想这也与你的舒适程度有关。
答案 1 :(得分:0)
SCD对我想要的东西来说太慢了。我需要使用基于set的sql。
事实证明,我的许多问题都与提供商中的错误有关。 我打开了一个论坛主题(http://www.pgoledb.com/forum/viewtopic.php?f=4&t=49)并与主持人/支持/开发人员进行了有益的讨论。
Postgres也不允许你做跨数据库查询,所以我用这种方式解决了这个问题:
请注意,临时表不是临时表,而是临时存储数据的归档表模式的副本。
花了一段时间,但我最终到了那里。
这个简单的任务要么采取一些方法。 SSIS绝不是企业级ETL产品,但它确实为您提供了一些快速简便的功能,并且足以支持大多数ETL工作。我想这也与你的舒适程度有关。
您建议使用哪种企业ETL解决方案?