如何使用时间戳列

时间:2016-11-22 16:41:10

标签: oracle etl talend

我正在尝试创建一个Talend作业,该作业将执行以下操作:

  1. 获取输入行并插入或更新到oracle表
  2. 如果该行已存在于Oracle表中,请检查是否需要基于主键匹配进行更新。
  3. 如果Oracle表中不存在该行,请插入新行。
  4. 这三个很简单,并且是通过对tOracleOutput组件中的数据执行“插入或更新”操作实现的。

    tOracleOutput upsert

    但是,我的问题是我在Oracle表中有2个额外的列:

    • DM_UPDATE_DATE
    • DM_INSERT_DATE

    如果发生更新,我需要在DM_UPDATE_DATE列中设置当前日期时间,但仅限于更新行时。 如果发生插入,我需要将DM_INSERT_DATE和DM_UPDATE_DATE设置为当前日期时间。
    我无法实现这种行为 - 是否有开箱即用的Talend解决方案?

    我查看了tMap组件,特别是这个SO Answer似乎有来自tMap组件的输出来区分更新和插入,但对于ETL作业中相当标准的东西来说,这似乎过于复杂。

1 个答案:

答案 0 :(得分:3)

保罗,

以下是解决方案:

由于在更新和插入时都设置了mod日期,因此请在tmap中设置它们。请参阅代码,但请记住这会返回一个字符串,因此请使用string作为tmap中的数据类型,并将varchar作为oracleoutput组件中的数据类型。

TalendDate.getDate("CCYY-MM-DD hh:mm:ss")

对于插入日期,请​​在表上使用Oracle默认值,并且不要通过Talend发送值。