Nifi 的 Jolt 规格
Jolt Spec for Nifi
我是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" }
能发展到这个地步。但我不知道如何获得 "details" 字段
[{
"operation": "shift",
"spec": {
"*": "home",
"mobileno": "home[0].mobileno"
}
}, {
"operation": "default",
"spec": {
"status": "${status}",
"home[]": {
"*": {
"name": "${name}",
"id" : "${id},
"address": "${address}"
}
}
}
}]
默认操作需要添加details属性。
试试下面的震动规格
[{
"operation": "shift",
"spec": {
"*": "home",
"mobileno": "home[0].mobileno"
}
}, {
"operation": "default",
"spec": {
"status": "${status}",
"details":"${details}",
"home[]": {
"*": {
"name": "${name}",
"id": "${id}",
"address": "${address}"
}
}
}
}]
除了 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、名称和地址字段都是相同的。根据您的属性,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)"
}
}
}
}
我是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" }
能发展到这个地步。但我不知道如何获得 "details" 字段
[{
"operation": "shift",
"spec": {
"*": "home",
"mobileno": "home[0].mobileno"
}
}, {
"operation": "default",
"spec": {
"status": "${status}",
"home[]": {
"*": {
"name": "${name}",
"id" : "${id},
"address": "${address}"
}
}
}
}]
默认操作需要添加details属性。
试试下面的震动规格
[{
"operation": "shift",
"spec": {
"*": "home",
"mobileno": "home[0].mobileno"
}
}, {
"operation": "default",
"spec": {
"status": "${status}",
"details":"${details}",
"home[]": {
"*": {
"name": "${name}",
"id": "${id}",
"address": "${address}"
}
}
}
}]
除了 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、名称和地址字段都是相同的。根据您的属性,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)"
}
}
}
}