Delete empty attributes in NiFi

ぐ巨炮叔叔 提交于 2019-12-23 01:13:40

问题


Because of this issue being still unresolved, I have an EvaluateJsonPath processor that sometimes outputs attributes with empty strings.

Is there a straight-forward way to delete attributes from a flowfile?

I tried using the UpdateAttributes processor, but it only is able to delete based on matching an attribute's name (I need to match on the attribute's value).


回答1:


you can use ExecuteGroovyScript 1.5.0 processor with the following code:

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



回答2:


After EvaluateJsonPath processor use RouteonAttribute processor and check the attributes having isEmpty values in them using Expression Language

Routeonattribute configs:- Add new property emptyattribute

${anyAttribute("id","age"):isEmpty()}

by using or funtion

${id:isEmpty():or(${age:isEmpty()})}

in the above expression language we are checking any id, age attribute having empty values for them and routing them to emptyattribute relation.

${allAttributes("id","age"):isEmpty()}

By using and function

${id:isEmpty():and(${age:isEmpty()})}

this expression routes only when both id,age attributes are empty.

Use Empty Relationship and connect that to Update Attribute processor and delete the attributes that you want to delete.

UpdateAttributeConfigs:-

in delete attribute expression mentioned id,age attributes need to delete.

By using RouteonAttribute after evaljsonpath processor we can check the required attributes are having values or not, then by using updateattribute we can delete the attributes that having empty values.




回答3:


You can use a jolt transform, but i can only get it to work for fields at the top level of the json. Any nested fields are lost, although perhaps some real jolt expert can improve on the solution to stop that happening.



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

    ]


来源:https://stackoverflow.com/questions/48593240/delete-empty-attributes-in-nifi

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!