Jolt 映射带条件的输入字段

问题描述

我想在我只需要将一个输入映射到输出的地方制造一些震动。

感谢任何帮助或建议。

  • 如果 topicA.ownertopicZ.owner 都存在输出 owner.name 应映射到 topicZ.owner>

  • 如果 topicA.owner输出 owner.name 应该映射到 topicA.owner

  • 如果 topicZ.owner输出 owner.name 应该映射到 topicZ.owner

输入:

CREATE INDEX performance_idx ON daily_factors (factor_date);

震动:

{
  "topicA": {
    "owner": "topic_a_owner"
  },"topicZ": {
    "owner": "topic_z_owner"
  }
}

预期输出

[
  {
    "spec": {
      "*": {
        "ta": "@(2,topicA.owner)","za": "@(2,topicZ.owner)"
      }
    },"operation": "modify-default-beta"
  },{
    "operation": "shift","spec": {
      "topicA": {
        "ta": "owner.name"
      },"topicZ": {
        "za": "owner.name"
      }
    }
  }
]

解决方法

您提到的3个条件可以简化为以下2个条件。

  • 如果 topicZ.owner 出现,(不管 topicA.owner 是否出现),那么输出 owner.name 应该被映射topicZ.owner(这将合并您的第一个和第三个条件)
  • 如果 topicA.owner 仅呈现,则输出 owner.name 应映射到 topicA.owner

所以在此基础上,可以进行以下操作。

  1. 使用 modify-default-beta 操作将 topicA.owner 的值复制到 topicZ.owner 字段topicZ.owner 不存在时
  2. 使用 shift 操作将 topicZ.owner 的值映射到输出中的 owner.name 字段。
[
  {
    "spec": {
      "topicZ": {
        "owner": "@(2,topicA.owner)"
      }
    },"operation": "modify-default-beta"
  },{
    "operation": "shift","spec": {
      "topicZ": {
        "owner": "owner.name"
      }
    }
  }
]