【问题标题】:Jolt Spec for NifiNifi 的 Jolt 规格
【发布时间】:2018-02-28 05:31:16
【问题描述】:

我是 nifi 的新手。我试图创建一个颠簸规范但没有得到它。谁能帮帮我。

详情如下: 流文件中的属性:详细信息、id、名称、地址、状态

流文件看起来像: [{“to”:“xxx1”},{“to”:“xxx2”},{“to”:“xxx3”},{“to”:“xxxn”}]

期待以下输出:

       { "details": "personal", 
         "home":[
                  {"mobileno": "xxx1",
                   "id": "1",
                   "name" :"bbb",
                   "address": "Address1" },
                  { "mobileno": "xxx2",
                    "id": "2",
                   "name": "aaa",
                   "address": "address2" }
               ],
           "status": "enabled" } 

我能够发展到现在。但我不知道如何获取“详细信息”字段

[{
  "operation": "shift",
  "spec": {

    "*": "home",
    "mobileno": "home[0].mobileno"
  }
}, {
  "operation": "default",
  "spec": {
    "status": "${status}",
    "home[]": {
      "*": {
        "name": "${name}",
        "id" : "${id},
        "address": "${address}"
      }
    }
  }
}]

【问题讨论】:

    标签: apache-nifi jolt


    【解决方案1】:

    除了 7632695 的回答之外,您的班次规范与输入中的“mobileno”不匹配,请尝试以下操作:

    [{
      "operation": "shift",
      "spec": {
        "*": {
          "to": "home[&1].mobileno"
        }
      }
    }, {
      "operation": "default",
      "spec": {
        "status": "${status}",
        "details": "${details}",
        "home[]": {
          "*": {
            "name": "${name}",
            "id": "${id}",
            "address": "${address}"
          }
        }
      }
    }]
    

    另外,请注意,对于单个流文件,属性是恒定的,因此对于主数组中的每个条目,每个 id、name 和 address 字段都是相同的。根据您的属性,JOLT 如何知道第一个元素使用 id=1,第二个元素使用 id=2,依此类推?

    如果您想使用输入数组的索引作为 id,您可以将此规范添加到您的链中:

    {
        "operation": "shift",
        "spec": {
          "home": {
            "*": {
              "$": "home[&1].id",
              "*": "home[&1].&"
            }
          },
          "*": "&"
        }
    }
    

    如果您希望它们从 1 而不是 0 开始,您可以通过将以下规范添加到您的链中,为它们中的每一个添加 1:

    {
      "operation": "modify-overwrite-beta",
      "spec": {
        "home": {
          "*": {
            "id": "=intSum(@0, 1)"
          }
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      在默认操作中需要添加 details 属性。

      尝试以下颠簸规范

      [{
        "operation": "shift",
        "spec": {
      
          "*": "home",
          "mobileno": "home[0].mobileno"
        }
      }, {
        "operation": "default",
        "spec": {
          "status": "${status}",
          "details":"${details}",
          "home[]": {
            "*": {
              "name": "${name}",
              "id": "${id}",
              "address": "${address}"
            }
          }
        }
      }]
      

      【讨论】:

      • 这个规格满足我的要求
      猜你喜欢
      • 1970-01-01
      • 2023-02-12
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多