适用于Nifi的Jolt Spec

时间:2018-02-28 05:31:16

标签: apache-nifi jolt

我是nifi的新手。我试图创建一个震动规范,但没有得到它。有谁可以帮助我。

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

Flow文件看起来像:            [{“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}"
      }
    }
  }
}]

2 个答案:

答案 0 :(得分:1)

除了7632695的回答,您的移位规格与输入上的“mobileno”不匹配,请尝试以下操作:

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

另请注意,对于单个流文件,属性是常量,因此对于home数组中的每个条目,每个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)"
      }
    }
  }
}

答案 1 :(得分:0)

在默认操作中,您需要添加详细信息属性。

尝试下面的颠簸规范

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

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