gpt4 book ai didi

Talend:更新子作业中的全局变量

转载 作者:行者123 更新时间:2023-12-04 17:00:04 24 4
gpt4 key购买 nike

我的简化工作如下所示:

tSetGlobalVar--->(onSubJobOK)--->tRunJob--->(onSubJobOK)--->tJava

  • tSetGlobalVar 将定义一个全局变量及其初始值,例如:myKey:"firstValue"
  • tRunJob 将运行一个只包含第二个 tSetGlobalVar 组件的子作业,该组件应该为主作业中定义的全局变量设置一个新值:((String)globalMap.get("myKey")): "newValue"也试过这个:"myKey": "newValue"
  • tJava 只是用来调试的,它的代码如下:System.out.println(((String)globalMap.get("myKey")));

  • 实际输出: firstValue
    预期输出: newValue
    有没有其他方法可以修改子作业中全局变量的值并获取主作业中的更新值?

    最佳答案

    您应该使用上下文变量而不是 globalMap 将数据传递给您的子作业。然后使用子作业中的 tBufferOutput 将数据传回父作业。

    例如,这是一个非常基本的设置,它接受一个 id 和一个日期并将其传递给一个子作业,该子作业只是将其打印到控制台/日志,然后将一些数据传回父级,该父级也只是打印到控制台/日志。

    家长工作:
    Parent job layout

    父作业中tFixedFlowInput中的数据如下:
    Parent tFixedFlowInput

    请注意您必须如何使用键值对组合作为键和值将其传递给 tContextLoad 组件,然后该组件将创建一个由键命名的上下文变量并保存定义的值。

    在父作业中,我们设置了 iddate上下文变量,然后立即打印作业的当前上下文(将包括刚刚设置的上下文变量)。

    在此之后,我们然后使用 tRunJob 组件集调用子作业以传递整个上下文:

    tRunJob configuration to call child job and pass context variables

    或者,您可以通过取消勾选 Transmit whole context 来指定传递给子作业的上下文变量。选项并明确定义要发送的上下文。也可以在此处定义上下文变量的值,但在作业的主要流程中生成上下文变量值并将它们作为键值对传递给 tContextLoad 组件通常更有意义。

    童工:
    Child job layout

    在子作业中,我们简单地通过将它们转储到带有 tContextDump 组件的 tLogRow 来打印已发送的上下文,然后在这种情况下我们使用另一个 tFixedFlowInput 硬编码一些数据:

    Child job tFixedFlowInput data

    然后我们将其传递给 tBufferOutput 组件,该组件允许我们读取父作业中的数据。

    回到父作业,然后我们通过主链接将 tLogRow 链接到 tRunJob,并提供子作业的 tBufferOutput 中的模式。然后打印来自子作业的数据。

    示例作业的输出是:

    .----+----------.
    |Parent Contexts|
    |=---+---------=|
    |key |value |
    |=---+---------=|
    |date|2014-10-30|
    |id |12345 |
    '----+----------'
    .----+----------.
    |Child Contexts |
    |=---+---------=|
    |key |value |
    |=---+---------=|
    |date|2014-10-30|
    |id |12345 |
    '----+----------'
    .-----+----------.
    |Child Data to be Passed to Parent|
    |=----+---------=|
    |id |date |
    |=----+---------=|
    |12346|2014-10-31|
    '-----+----------'

    .-----+----------.
    |Output from Child1|
    |=----+---------=|
    |id |date |
    |=----+---------=|
    |12346|2014-10-31|
    '-----+----------'

    globalMap 将数据存储在作业本身中,根本不与父作业或子作业共享,因此不能用于此目的。

    关于Talend:更新子作业中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26651673/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com