【问题标题】:Delete empty attributes in NiFi删除 NiFi 中的空属性
【发布时间】:2018-02-03 02:04:06
【问题描述】:

由于this issue 仍未解决,我有一个EvaluateJsonPath 处理器,它有时会输出带有空字符串的属性。

有没有直接从流文件中删除属性的方法?

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

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在 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()})}

      仅当 id,age 属性都为空时,此表达式才会路由。

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

      UpdateAttributeConfigs:-

      delete属性表达式中提到id,age属性需要删除。

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

      【讨论】:

      • 以有限的方式工作。我仍然认为这有点疯狂——我有一个 AVRO Schema 专门用于验证允许特定字段为空的传入记录......但是我必须做后空翻,因为 NiFi 插入空字符串(而不是保持它们为空)跨度>
      • 一旦您验证了具有空字符串的所需属性值,然后使用 UpdateAttribute 高级用法 并检查具有空字符串的所需属性值,然后将值更改为 null。有关更新属性的高级用法,请参阅此链接community.hortonworks.com/questions/141774/… 添加规则: idnull 条件:- ${id:isEmpty():or(${id:isNull( )})} 操作:- id(attribute) null(value)
      【解决方案3】:

      您可以使用颠簸变换,但我只能让它适用于 json 顶层的字段。任何嵌套字段都会丢失,尽管也许一些真正的 jolt 专家可以改进解决方案以阻止这种情况发生。

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

      【讨论】:

        【解决方案4】:

        一旦您验证了具有空字符串的所需属性值,然后使用 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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-15
          • 2015-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多