如何使用时间戳列执行简单的 Talend Upsert
How to do a simple Talend Upsert with timestamp column
我正在尝试创建一个将执行以下操作的 Talend 作业:
- 获取输入行并插入或更新到 oracle table
- 如果该行已存在于 Oracle table,请检查是否需要根据主键匹配进行更新。
- 如果该行在 Oracle table 中不存在,请插入一个新行。
这 3 个很简单,并且已通过对 tOracleOutput 组件中的数据执行 "Insert Or Update" 操作来实现。
但是,我的问题是我在 Oracle table 中有 2 个额外的列:
- DM_UPDATE_DATE
- DM_INSERT_DATE
如果发生更新,我需要在 DM_UPDATE_DATE 列中设置当前日期时间,但前提是该行已更新。
如果发生插入,我需要将 DM_INSERT_DATE 和 DM_UPDATE_DATE 设置为当前日期时间。
我无法实现此行为 - 是否有开箱即用的 Talend 解决方案?
我查看了 tMap 组件,特别是这个 SO Answer 似乎有来自 tMap 组件的输出以区分更新和插入,但这对于 ETL 中非常标准的东西来说似乎过于复杂职位。
保罗,
解决方法如下:
由于 mod 更新和插入都设置了日期,因此请在 tmap 中设置它们。查看代码,但请记住 returns 是一个字符串,因此在 tmap 中使用字符串作为数据类型,在 oracleoutput 组件中使用 varchar 作为数据类型。
TalendDate.getDate("CCYY-MM-DD hh:mm:ss")
对于插入日期,请在 table 上使用 Oracle 默认值,并且不要通过 Talend 发送值。
我正在尝试创建一个将执行以下操作的 Talend 作业:
- 获取输入行并插入或更新到 oracle table
- 如果该行已存在于 Oracle table,请检查是否需要根据主键匹配进行更新。
- 如果该行在 Oracle table 中不存在,请插入一个新行。
这 3 个很简单,并且已通过对 tOracleOutput 组件中的数据执行 "Insert Or Update" 操作来实现。
但是,我的问题是我在 Oracle table 中有 2 个额外的列:
- DM_UPDATE_DATE
- DM_INSERT_DATE
如果发生更新,我需要在 DM_UPDATE_DATE 列中设置当前日期时间,但前提是该行已更新。
如果发生插入,我需要将 DM_INSERT_DATE 和 DM_UPDATE_DATE 设置为当前日期时间。
我无法实现此行为 - 是否有开箱即用的 Talend 解决方案?
我查看了 tMap 组件,特别是这个 SO Answer 似乎有来自 tMap 组件的输出以区分更新和插入,但这对于 ETL 中非常标准的东西来说似乎过于复杂职位。
保罗,
解决方法如下:
由于 mod 更新和插入都设置了日期,因此请在 tmap 中设置它们。查看代码,但请记住 returns 是一个字符串,因此在 tmap 中使用字符串作为数据类型,在 oracleoutput 组件中使用 varchar 作为数据类型。
TalendDate.getDate("CCYY-MM-DD hh:mm:ss")
对于插入日期,请在 table 上使用 Oracle 默认值,并且不要通过 Talend 发送值。