我正在尝试使用 apache nifi 来练习转换数据,我一直在尝试使用 GetFile 来获取我的 4 个 JSON 文件,我的目标是转换这 4 合 1,但对我来说重要的是要记住它们来自哪里,因为 1引用帖子、一篇引用广告、一篇引用视频 我一直在使用更新属性来保存文件名,并使用更新属性来更新数据,然后使用合并仅生成 1 个文件
我在合并文件时没有问题,但是当我尝试添加新属性时我无法做得很好
{
"impressions_history_ads_seen": [
{
"string_map_data": {
"Time": {
"timestamp": 1705789300
}
}
},
{
"string_map_data": {
"Time": {
"timestamp": 1705789746
}
}
},
{
"string_map_data": {
"Author": {
"value": "twdss"
},
"Time": {
"timestamp": 1705790493
}
}
},
{
"string_map_data": {
"Author": {
"value": "mitprofessionaled"
},
"Time": {
"timestamp": 1705809684
}
}
}
这是我原来的json
我想在作者和时间的同一级别添加 type_interaction 的值并给出 >filename 值
在更新数据中
filename = ${filename:substringBeforeLast('.')}
> in the JoltTransformJSON
[
{
"operation": "shift",
"spec": {
"*": {
"*": {
"*":&,
"type_interaction":"${filename}"
}
}
}
}
]
您可以尝试以下震动规格。请记住,当您进行移位规范并且想要保持相同的结构时,您需要在 RHS 中指定遍历的完整结构。
[
{
"operation": "shift",
"spec": {
"*": {
"*": {
"*": {
"*": "&3.[&2].&1.&",
"#${filename}": "&3.[&2].&1.type_interaction"
}
}
}
}
}
]
此外,当您想要在班次规范中设置默认值时,您可以在 LHS 中以 # 开头指定值。由于 Nifi 在 Jolt 规范中允许表达式语言,因此流程文件属性 ${filename} 将在转换之前替换为实际值。