【问题标题】:NiFi: change text in FlowFile (Python or ...)NiFi:更改 FlowFile 中的文本(Python 或 ...)
【发布时间】:2021-12-23 12:46:56
【问题描述】:

我是 NiFi 的新手.. 我从我的处理器“ConsumerKafka”获取数据(FlowFile?),看起来像

所以,我必须删除 '!' 之前的所有文本,我懂一点 Python。所以用“ExcecuteScript”,我想做这样的事情

my_string=session.get()
my_string.split('!')[1]
#it return "ZPLR_CHDN_UPN_ECN....."

但是如何正确地做呢? p.s.或者,可能是使用“substringAfterLast”,但如何? 坦克。

更新:

我必须删除 '"Tagname":' 和 '!' 之间的文本,如果没有正则表达式,我该怎么做?

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

    如果您只是想在一个 bang (!) 上拆分并且只保留文本 之后,那么您可以通过将 SplitContent 配置为:

    Byte Sequence Format: Text
    
    Byte Sequence: !
    
    Keep Byte Sequence: false
    

    RouteOnAttribute 配置为:

    Routing Strategy: Route to Property name
    
    Add a new dynamic property called "substring_after" with a value: ${fragment.index:equals(2)}
    

    对于您的输入,这将产生 2 个流文件 - 一个带有之前的子字符串!一个在 ! 之后带有子字符串。第一个 FlowFile(之前的子字符串)将从 RouteOnAttribute 路由到 unmatched 关系,而第二个 FlowFile(之后的子字符串)将路由到 substring_after强>关系。您可以自动终止不匹配的关系以删除您不想要的文本。

    不过,这种方法也有缺点。

    1. 你保证只有一个!在内容?您将如何处理多个?
    2. 您正在将某些 JSON 上的子字符串作为原始文本。分裂开!将导致在字符串末尾留下一个 "}

    这些看起来像日志条目,您可能需要考虑查看 ConsumeKafkaRecord 并利用 NiFi 的 Record 功能更智能地解释和操作数据。

    关于脚本,有一些很棒的 NiFi 脚本学习食谱,从这里开始:https://community.cloudera.com/t5/Community-Articles/ExecuteScript-Cookbook-part-1/ta-p/248922

    编辑:

    鉴于您的更新,我会将UpdateRecord 与 JSON 读取器和写入器一起使用,并将 Replacement Value Strategy 设置为 Record Path Value

    这使用RecordPath 语法对记录中的数据执行转换。您的 JSON 对象是一条记录。这将允许您在同一个流文件中拥有多个记录(而不是每个流文件 1 行)。

    然后,向 UpdateRecord 添加一个动态属性:

    姓名: /标记名

    值: substringAfter(/Tagname, '!' )

    这是在做什么?

    属性的名称 (/Tagname) 是 JSON 中 Tagname 键的 RecordPath。这告诉 UpdateRecord 将结果放在哪里。在您的情况下,我们正在替换现有键的值(但如果您想添加一个,它也可以是一个新键)。

    属性的 Value 是要评估的表达式,以构建您要插入的值。我们正在使用 substringAfter 函数,它有 2 个参数。第一个参数是记录中包含输入字符串的键的记录路径,它也是/Tagname(我们将标记名的值替换为原始标记名值的子字符串)。第二个参数是要拆分的字符串,即!

    【讨论】:

    • 抱歉,我必须删除 '"Tagname":' 和 '!' 之间的文本,如果没有正则表达式,我该怎么做?
    • 请查看更新,这应该适用于您的用例
    【解决方案2】:

    如果您的目的是获取 !"} 之间的字符串,请使用 ReplaceText(.*)!(.*)"} ,捕获第二组并将其替换为整个内容

    请注意,此正则表达式可能不适合您的情况,但我相信您可以找到正则表达式问题的解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多