talend tMap 逻辑与 SQL 逻辑 - 性能
talend tMap logic vs SQL logic - performance
我的场景是这样的:我在 table 中有两个字段 (ref1, ref2),我可以根据另一个字段 (factor_column) 的值获取我需要的值。这可以通过两种方式实现,但我不确定哪种方式效率更高?
1) 当 factor_column = Y 然后 ref1...
使用 SELECT 情况
2) 正常 SELECT ref1、ref2 等。并在 talend 组件 tMap 中使用表达式:(factor_column.equals("Y")?ref1: ref2)
我的 talend 工作流程是这样的:
tOracleInput -> tMap - tOutput
将逻辑放在 tOracleInput 的 SELECT 子句上还是放在 tMap 上更好?
- 如果您使用 SELECT 并在数据库中进行处理,将在 ETL/ELT 作业之外处理大量数据集,这非常有帮助
- 如果您使用表达式,整个数据集将加载到 Talend 中并进行处理。根据数据集,您可能没有足够的 RAM 或堆来完成您的请求(还要考虑随着时间的推移增加数据集)
所以这取决于你的数据大小。
在 tOracleInput
中:逻辑将在整个查询中执行,在 DBMS 中通过 JDBC 连接
In the tMap
: 逻辑将在JVM中执行。
一般来说,使用 DBMS 比使用 ETL 更快,作业设计也会更简单。
我的场景是这样的:我在 table 中有两个字段 (ref1, ref2),我可以根据另一个字段 (factor_column) 的值获取我需要的值。这可以通过两种方式实现,但我不确定哪种方式效率更高?
1) 当 factor_column = Y 然后 ref1...
使用 SELECT 情况2) 正常 SELECT ref1、ref2 等。并在 talend 组件 tMap 中使用表达式:(factor_column.equals("Y")?ref1: ref2)
我的 talend 工作流程是这样的: tOracleInput -> tMap - tOutput
将逻辑放在 tOracleInput 的 SELECT 子句上还是放在 tMap 上更好?
- 如果您使用 SELECT 并在数据库中进行处理,将在 ETL/ELT 作业之外处理大量数据集,这非常有帮助
- 如果您使用表达式,整个数据集将加载到 Talend 中并进行处理。根据数据集,您可能没有足够的 RAM 或堆来完成您的请求(还要考虑随着时间的推移增加数据集)
所以这取决于你的数据大小。
在
tOracleInput
中:逻辑将在整个查询中执行,在 DBMS 中通过 JDBC 连接In the
tMap
: 逻辑将在JVM中执行。
一般来说,使用 DBMS 比使用 ETL 更快,作业设计也会更简单。