如何有效地执行映射(使用 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 中的数据存储在磁盘而不是内存中。
我在 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 中的数据存储在磁盘而不是内存中。