【发布时间】:2018-02-03 02:04:06
【问题描述】:
由于this issue 仍未解决,我有一个EvaluateJsonPath 处理器,它有时会输出带有空字符串的属性。
有没有直接从流文件中删除属性的方法?
我尝试使用UpdateAttributes 处理器,但它只能根据匹配属性的名称来删除(我需要匹配属性的值)。
【问题讨论】:
标签: apache-nifi
由于this issue 仍未解决,我有一个EvaluateJsonPath 处理器,它有时会输出带有空字符串的属性。
有没有直接从流文件中删除属性的方法?
我尝试使用UpdateAttributes 处理器,但它只能根据匹配属性的名称来删除(我需要匹配属性的值)。
【问题讨论】:
标签: apache-nifi
您可以将ExecuteGroovyScript 1.5.0 处理器与以下代码一起使用:
def ff=session.get()
if(!ff)return
def emptyKeys = ff.getAttributes().findAll{it.value==null || it.value==''}.collect{it.key}
ff.removeAllAttributes(emptyKeys)
REL_SUCCESS<<ff
【讨论】:
在 EvaluateJsonPath 处理器使用 RouteonAttribute 处理器并使用表达式语言检查其中具有 isEmpty 值的属性
Routeon属性配置:- 添加新属性 空属性
${anyAttribute("id","age"):isEmpty()}
通过使用或函数
${id:isEmpty():or(${age:isEmpty()})}
在上述表达式语言中,我们检查任何具有空值的 id、age 属性并将它们路由到 emptyattribute 关系。
${allAttributes("id","age"):isEmpty()}
通过使用和函数
${id:isEmpty():and(${age:isEmpty()})}
使用空关系并将其连接到更新属性处理器并删除要删除的属性。
delete属性表达式中提到id,age属性需要删除。
通过在 evaljsonpath 处理器之后使用 RouteonAttribute 我们可以检查所需的属性是否具有值,然后通过使用 updateattribute 我们可以删除具有空值的属性。
【讨论】:
您可以使用颠簸变换,但我只能让它适用于 json 顶层的字段。任何嵌套字段都会丢失,尽管也许一些真正的 jolt 专家可以改进解决方案以阻止这种情况发生。
[
{
"operation": "shift",
"spec": {
"*": {
"": "TRASH",
"*": {
"$": "&2"
}
}
}
},
{
"operation": "remove",
"spec": {
"TRASH": ""
}
}
]
【讨论】:
一旦您验证了具有空字符串的所需属性值,然后使用 UpdateAttribute Advanced Usage 并检查具有空字符串的所需属性值,然后将值更改为 null。有关更新属性的高级用法,请参阅此链接社区。 hortonworks.com/questions/141774/... 添加规则:idnull 条件:- ${id:isEmpty():or(${id:isNull()})} 操作:- id(attribute) null(value) – Shu Feb 18 年 3 月 3:08
该方法不删除属性,只是将属性值设置为null。
【讨论】: