Apache nifi 删除NiFi中的空属性

Apache nifi 删除NiFi中的空属性,apache-nifi,Apache Nifi,由于仍然无法解析,我有一个EvaluateJsonPath处理器,它有时输出带有空字符串的属性 是否有一种直接的方法可以从流文件中删除属性 我尝试使用UpdateAttributes处理器,但它只能根据匹配的属性名称来删除我需要匹配的属性值。EvaluateJsonPath处理器使用RouteonAttribute处理器,并使用表达式语言检查其中包含isEmpty值的属性 Routeonattribute配置:- 添加新属性 清空礼物 ${anyAttributeid,年龄:isEmpty} 通

由于仍然无法解析,我有一个EvaluateJsonPath处理器,它有时输出带有空字符串的属性

是否有一种直接的方法可以从流文件中删除属性


我尝试使用UpdateAttributes处理器,但它只能根据匹配的属性名称来删除我需要匹配的属性值。

EvaluateJsonPath处理器使用RouteonAttribute处理器,并使用表达式语言检查其中包含isEmpty值的属性

Routeonattribute配置:- 添加新属性 清空礼物

${anyAttributeid,年龄:isEmpty}

通过使用或功能

${id:isEmpty:或${age:isEmpty}

在上面的表达式语言中,我们检查任何id、age属性的空值,并将它们路由到emptyattribute关系

${allAttributesid,年龄:isEmpty}

通过使用和功能

${id:isEmpty:和${age:isEmpty}

此表达式仅在id、年龄属性均为空时路由。

使用空关系并将其连接以更新属性处理器并删除要删除的属性

UpdateAttributeConfigs:-

在删除id中提到的属性表达式中,年龄属性需要删除

通过在evaljsonpath处理器之后使用RouteonAttribute,我们可以检查所需的属性是否具有值,然后通过使用updateattribute,我们可以删除具有空值的属性

您可以将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

您可以使用jolt转换,但我只能让它在json的顶级字段中工作。任何嵌套字段都会丢失,尽管一些真正的震动专家可能会改进解决方案以阻止这种情况发生



    [
      {
        "operation": "shift",
        "spec": {
          "*": {
            "": "TRASH",
            "*": {
              "$": "&2"
            }
          }
        }
      },
      {
        "operation": "remove",
        "spec": {
          "TRASH": ""
        }
      }

    ]

验证具有空字符串的所需属性值后,请使用UpdateAttribute Advanced Usage并检查具有空字符串的所需属性值,然后将值更改为null。有关更新属性的高级用法,请参阅此链接community.hortonworks.com/questions/141774/…添加规则:idnull条件:-${id:isEmpty:或${id:isNull}}操作:-idattribute nullvalue–2018年2月3日3:08


该方法没有删除属性,只是将属性值设置为null。

的工作方式有限。我仍然认为这有点疯狂-我有一个AVRO模式专门用于验证传入记录,允许特定字段为null…但是我必须进行倒推,因为NiFi插入空字符串,而不是将它们保持为null验证具有空字符串的必需属性值,然后使用UpdateAttribute Advanced Usage并检查具有空字符串的必需属性值,然后将该值更改为null。有关更新属性的高级使用,请参阅此链接添加规则:idnull条件:-${id:isEmpty:或${id:isNull}操作:-idattribute nullvalue