我在Talend找到了一份工作。该工作的目标是将18个表(每个记录2百万个)转换为一个表。 18个表共享2列。
所以,在工作的时候我发现了这些问题:
1)一次连接18个表时,我无法完成工作。 (内存错误)我的工作看起来像这样,但有更多的连接:
2)我试图只连接一半,但它永远持续(8小时仍在计数) - 根本不高效! - :
3)我试图将这份工作分成几个小工作,但仍然没有成功。我被困在这里。
如何优化这项工作的任何建议?
非常感谢阅读和双重感谢回答。
答案 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
"为了执行当前行的查询查询:
在查询查询中,您可以访问tMap中定义的全局变量,例如:(Integer)globalMap.get("myLookupKey")
,以便在数据库端过滤数据并仅返回与查找键匹配的值。
以下是详细的example。
还可以选择"存储临时数据"用于查找,优化内存使用,因为查找表中的数据存储在磁盘而不是内存中。