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

How to perform a mapping efficiently (with 18 input tables)

我在 Talend 工作。该工作的目标是将 18 个表(每个表有 200 万条记录)转换为一个表。 18 个表共享 2 列。

所以,在工作中我发现了这些问题:

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

2) 我试着只连接了一半,但它一直持续下去(8 小时,还在计算)-一点效率都没有!-:

3) 我试着把工作分成几个小的,但还是没有成功。我卡在这里了。

关于如何优化这项工作有什么建议吗?

非常感谢您的阅读,也非常感谢您的回答。

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

您可以像这样将其拆分为多个 tMap,而不是让单个 tMap 进行大量查找:

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

这不是强制性的,但您可以通过这种方式轻松修改查找。

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

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

这里有详细的example

还有用于查找的 "Store temp data" 选项,它优化了内存使用,因为查找 tables 中的数据存储在磁盘而不是内存中。