【问题标题】:How to store Numeric.Sequence routine return value in context variable如何将 Numeric.Sequence 例程返回值存储在上下文变量中
【发布时间】:2017-02-28 00:43:28
【问题描述】:

我正在开发一个 Talend ETL 工作,如下所示。

我有每天从中提取数据的源数据库。我的目标表包含两列 id、name。对于 id 列,我从 Numeric.Sequence("s1",1,1) 例程生成值。但是我的问题是,当我执行作业时,它会从起始值生成值,即在 Numeric.Sequence 例程中提供的值。但我想获得最后生成的值作为起始值。

解决方案:我可以通过从表中提取最大 id 来实现但我不想使用表。 我想将使用 Numeric.Sequence 例程生成的最大 id 值存储在上下文变量中,并在我执行作业时将其用作起始值。我试过了,但它只产生了新的价值。

请让我知道 Talend 中的所有可用选项。

【问题讨论】:

  • Talend 是一个面向对象的工具。在本次运行中不能设置下一次作业运行的顺序起始值。如果您在 globalMap 中创建一个对象并存储下一个作业的序列起始值,那么在下一个作业运行期间,该 globalMap 将被重新初始化。您可以做的是,您可以将下一次作业运行的起始值保存到文本文件中,并在下一次作业运行时读取该文件。

标签: talend


【解决方案1】:

每次执行作业时都会重置作业上下文。 请记住,您正在运行一个 Java 程序,变量仅在程序处于活动状态时才会保留,而不是之后。

一种解决方案是使用数据库序列(以 postgreSQL 为例):

  • 在目标表的 id 列上添加序列
  • 在输出组件中使用“nextval(''::regclass)”(见下图)

nextval_example

【讨论】:

    猜你喜欢
    • 2017-01-07
    • 2013-02-07
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多