由于this issue仍未解决,我有一个EvaluateJsonPath
处理器,有时会输出带空字符串的属性。
是否有直接的方法从流文件中删除属性?
我尝试使用UpdateAttributes
处理器,但它只能根据匹配属性的名称进行删除(我需要匹配属性的值)。
答案 0 :(得分:4)
您可以使用以下代码使用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
答案 1 :(得分:1)
在EvaluateJsonPath处理器之后使用 RouteonAttribute 处理器并使用表达式语言检查其中包含isEmpty值的属性
Routeonattribute配置: - 添加新属性 emptyattribute
$ {anyAttribute(&#34; ID&#34;&#34;年龄&#34):的isEmpty()}
使用或功能
$ {ID:的isEmpty():或($ {年龄:的isEmpty()})}
在上面的表达式语言中,我们检查任何具有空值的id,age属性,并将它们路由到 emptyattribute 关系。
$ {allAttributes(&#34; ID&#34;&#34;年龄&#34):的isEmpty()}
使用和功能
$ {ID:的isEmpty():和($ {年龄:的isEmpty()})}
使用空关系并将其连接到更新属性处理器并删除要删除的属性。
<强> UpdateAttributeConfigs: - 强>
在删除属性表达式中提到id,age属性需要删除。
通过在evaljsonpath处理器之后使用RouteonAttribute,我们可以检查所需的属性是否具有值,然后通过使用updateattribute我们可以删除具有空值的属性。
答案 2 :(得分:0)
您可以使用jolt变换,但是我只能使它适用于json顶层的字段。任何嵌套字段都将丢失,尽管也许某些真正的震动专家可以改进解决方案以阻止这种情况的发生。
[
{
"operation": "shift",
"spec": {
"*": {
"": "TRASH",
"*": {
"$": "&2"
}
}
}
},
{
"operation": "remove",
"spec": {
"TRASH": ""
}
}
]
答案 3 :(得分:-1)
一旦您验证了具有空字符串的必需属性值,然后使用UpdateAttribute高级用法并检查了具有空字符串的必需属性值,然后将该值更改为null。有关Update属性的高级用法,请参考此链接社区。 hortonworks.com/questions/141774/…添加规则:idnull条件:-$ {id:isEmpty():or($(id {isNull()})}动作:-id(attribute)null(value)– Shu Feb 18年3月3日在3:08
该方法不会删除属性,而只是将属性值设置为null。