插入/更新talend的替代设计

插入/更新talend的替代设计,talend,Talend,我在Talend中有一个要求,其中我必须更新/插入从源表到目标表的行。源表和目标表是相同的。源由业务流程刷新,需要在目标表中更新/插入这些结果 我为tmap和tmysqloutput中的“插入或更新”而设计。然而,这项工作却非常缓慢 作为上述解决方案的替代方案,我尝试分别设计插入和更新。为了做到这一点,我想散列源行,因为行数通常会更少 所以,我的问题是我将散列输入行,但是当我将它们与tmap中的目标行连接时,我是否也应该散列目标行?或者我应该按原样使用目标行,然后加入它们 对这里的工作设计有什么

我在Talend中有一个要求,其中我必须更新/插入从源表到目标表的行。源表和目标表是相同的。源由业务流程刷新,需要在目标表中更新/插入这些结果

我为tmap和tmysqloutput中的“插入或更新”而设计。然而,这项工作却非常缓慢

作为上述解决方案的替代方案,我尝试分别设计插入和更新。为了做到这一点,我想散列源行,因为行数通常会更少

所以,我的问题是我将散列输入行,但是当我将它们与tmap中的目标行连接时,我是否也应该散列目标行?或者我应该按原样使用目标行,然后加入它们

对这里的工作设计有什么建议吗

谢谢
Rathi

是的,我认为您也应该为目标表使用哈希组件。 因为你的处理(查找)会非常快,因为它发生在内存中


如果不是,则查找加载可能需要更多时间。

是的,我认为您也应该为目标表使用哈希组件。 因为你的处理(查找)会非常快,因为它发生在内存中


如果不是,则查找加载可能需要更多的时间。

如果使用相同的数据库,则不应使用ETL加载技术,而应使用ELT加载,以便所有处理都在数据库中进行。Talend提供了一些ELT组件,这些组件的使用略有不同,但对这种情况非常有用。我只需要使用这些组件就可以将速度提高多个数量级

在源和目标中使用索引散列字段仍然是一个好主意,这与在Data Vault 2.0模型中加载卫星的方式相同


可选地,如果您可以直接访问源表数据库,可以考虑为C(R)UD场景添加触发器。这样,源数据库上的每个操作都可以立即反映在数据库中。但请记住,您可能需要考虑一个缓冲表(“暂存”),您可以在其中存储更改,以便能够在以后快速接收处理。在此表中,只有已更改的行和更改类型(创建、更新、删除)可供您处理。这将分离加载和处理,如果以后加载或处理出现问题,这将非常有用。

如果使用同一个数据库,则不应使用ETL加载技术,而应使用ELT加载,以便所有处理都在数据库中进行。Talend提供了一些ELT组件,这些组件的使用略有不同,但对这种情况非常有用。我只需要使用这些组件就可以将速度提高多个数量级

在源和目标中使用索引散列字段仍然是一个好主意,这与在Data Vault 2.0模型中加载卫星的方式相同


可选地,如果您可以直接访问源表数据库,可以考虑为C(R)UD场景添加触发器。这样,源数据库上的每个操作都可以立即反映在数据库中。但请记住,您可能需要考虑一个缓冲表(“暂存”),您可以在其中存储更改,以便能够在以后快速接收处理。在此表中,只有已更改的行和更改类型(创建、更新、删除)可供您处理。这将使加载和处理分离,如果以后加载或处理出现问题,这将非常有用。

Hi PreetyK,感谢您的回复。所以,我的源表只有很少的记录,而我的目标表非常庞大,我应该在tHash中加载所有的目标行吗?这不会导致问题吗?比不使用目标哈希组件要好。谢谢PreetyK。有时thash会出现内存不足和堆空间错误。我如何处理这种情况?这些大量的数据只是偶尔出现一次。嗨,普里蒂克,谢谢你的回复。所以,我的源表只有很少的记录,而我的目标表非常庞大,我应该在tHash中加载所有的目标行吗?这不会导致问题吗?比不使用目标哈希组件要好。谢谢PreetyK。有时thash会出现内存不足和堆空间错误。我如何处理这种情况?这些大量的数据只是偶尔出现一次。嗨,tobi6,谢谢你的回复。我不能在我的源上使用触发器或任何新对象,因为它的数据是基于SQL Server中的CDC加载的,任何新对象都会导致SQL Server和mysql之间的同步问题。此外,对于ELT组件,源表和目标表必须在同一个架构上,在我的例子中,它们不是。如果我错了,请纠正我嘿,在这种情况下,CDC是一个很好的合作伙伴。我只需要在我的模式中创建一个额外的staging表,并将来自CDC的所有信息放在那里。然后,所有数据都在一个模式中,可以使用ELT加载。但是,仔细想想,CDC的数据不是已经提供了你需要的所有信息吗?那么您可以创建一个要插入的分支,以及第二个要更新的分支?请记住,如果进程失败,您应该能够重新启动进程。CDC加载的不是一个模式,而是多个模式。我的来源是所有这些表的联接。联接为我提供了所有表的非规范化版本,inturn将进一步被报表使用。因此,我不能在这种情况下使用CDC,那么我还没有完全理解您的管道。CDC数据存储在哪里?为什么不抄呢?为什么要提前加入?我认为可能存在某种脱钩的可能性。SQL Server有3个数据库,它们在mysql中被CDC'ed为3个模式。我在3个模式中连接多个表并生成一个数据集,用于在mysql的另一个模式中插入/更新表。Th