如何有效地执行映射(使用18个输入表)

时间:2018-02-07 11:42:53

标签: talend

我在Talend找到了一份工作。该工作的目标是将18个表(每个记录2百万个)转换为一个表。 18个表共享2列。

所以,在工作的时候我发现了这些问题:

1)一次连接18个表时,我无法完成工作。 (内存错误)我的工作看起来像这样,但有更多的连接:

enter image description here

2)我试图只连接一半,但它永远持续(8小时仍在计数) - 根本不高效! - :

enter image description here

3)我试图将这份工作分成几个小工作,但仍然没有成功。我被困在这里。

如何优化这项工作的任何建议?

非常感谢阅读和双重感谢回答。

1 个答案:

答案 0 :(得分:1)

如果您优化了他们的使用方式,您可以轻松地在工作中进行数十次查找。您可以执行以下操作以优化您的工作:

您可以将其拆分为多个tMap,而不是单个tMap包含大量查询:

           lkp_1      lkp_2       lkp_3            lkp_y
             |          |          |                |
Source --- tMap_1 --- tMap_2 --- tMap_3 ---... --- tMap_x --- target

这不是强制性的,但这样您就可以轻松修改查找。

接下来,为了优化内存使用,您可以查看" reload at each row" tMap的选项。而不是使用默认的" load at once"它将您的查找表加载到内存中,您可以使用" reload at each row"为了执行当前行的查询查询:

enter image description here

在查询查询中,您可以访问tMap中定义的全局变量,例如:(Integer)globalMap.get("myLookupKey"),以便在数据库端过滤数据并仅返回与查找键匹配的值。

以下是详细的example

还可以选择"存储临时数据"用于查找,优化内存使用,因为查找表中的数据存储在磁盘而不是内存中。