我在Talend中有一个要求,在其中我必须从源表更新/插入行到目标表。源表和目标表是相同的。源被业务流程刷新,需要在目标表中更新/插入这些结果。
我在tmap和tmysqloutput中设计了“插入或更新”。然而,这项工作被证明是超级慢的。
作为上述解决方案的替代方案,我正在尝试设计insert和update separately.In顺序来实现这一点,我想散列源行,因为行数通常会更少。
所以,我的问题是我将散列输入行,但是当我将它们与tmap中的目标行连接时,我是否也应该散列目标行?或者我应该按原样使用目标行,然后连接它们?
对这里的工作设计有什么建议吗?
谢谢Rathi
发布于 2017-07-12 14:29:50
如果您使用的是同一数据库,则不应使用ETL加载技术,而应使用ELT加载,以便所有处理都将在数据库中进行。Talend提供了一些ELT组件,这些组件使用起来有点不同,但对这种情况很有帮助。仅使用这些组件,我就可以将速度提高数倍。
在源和目标中都使用带索引的散列字段仍然是一个好主意,这与在Data Vault 2.0模型中加载卫星时采用的方法相同。
或者,如果您可以直接访问源表数据库,则可以考虑为C(R)UD场景添加触发器。这样,源数据库上的每个操作都可以立即反映到您的数据库中。但请记住,您可能需要考虑一个缓冲表(“暂存”),您可以在其中存储您的更改,以便您能够快速摄取,稍后处理。在此表中,只有已更改的行和更改类型(create、update、delete)可供您处理。这解耦了加载和处理,如果稍后加载或处理会出现问题,这会很有帮助。
发布于 2017-07-12 03:27:29
是的,我相信你也应该对目标表使用散列组件。因为你的处理(查找)会非常快,因为它发生在内存中
如果不是,那么查找加载可能需要更多时间。
https://stackoverflow.com/questions/45037111
复制相似问题