APACHE NIFI学习之—UpdateAttribute
作者:小教学发布时间:2023-10-02分类:程序开发学习浏览:81
UpdateAttribute
描述:
通过设置属性表达式来更新属性,也可以基于属性正则匹配来删除属性
标签:
attributes, modification, update, delete, Attribute Expression Language, state, 属性, 修改, 更新, 删除, 表达式
参数:
如下列表中,必填参数则标识为加粗. 其他未加粗参数,则表示为可选参数。表中同时提到参数默认值设置, 并且 参数还支持 表达式语言.
名字 | 默认值 | 允许值列表 | 描述 |
---|---|---|---|
删除属性正则 | 将删除与正则匹配相匹配的数据流上的属性, Existing attributes that match will be deleted regardless of whether they are updated by this processor. 支持表达式语言 (支持流属性和变量) | ||
存储状态 | 不存储 | 不存储仅本地存储 | 是否需要存储状态,选择“无状态”将提供以无状态方式单纯的更新流文件属性。选择有状态将不仅在数据流上存储属性,还存储组件状态。 可查看组件'高级设置'的'状态用法'章节获取更多信息 |
状态变量初始化值 | 用于设置变量状态的初始值。 当状态中没有一个变量的值时,该值仅被用在@OnScheduled方法中。如果是有状态的,则该参数是必须的,但也可以设置为空 |
动态参数:
名字 | 值 | 描述 |
---|---|---|
A FlowFile attribute to update | The value to set it to | 更新或设置一个数据流属性,该参数可通过动态参数的键值来设置,且与属性对应。 支持表达式语言 (支持流属性和变量) |
连线:
名字 | 描述 |
---|---|
success | 所有成功的数据流将输出到此连线 |
读取属性:
未提供。
写入属性:
名字 | 描述 |
---|---|
See additional details | 组件可以添加或删除0到多个属性描述,参见附加详细信息 |
状态管理:
范围 | 描述 |
---|---|
LOCAL | 提供选项来存储数据流的属性值,也引用有状态变量 |
限制:
该组件没有限制
输入流要求:
组件必须提供输入流。
系统资源考量:
未提供。
* 遇到的问题
问题1:如何在Nifi中将属性设置为空字符串
解决方法:${literal("")}
试试
attribute_name
${literal("")}
问题2:增加一个属性
id2 233
输出结果:
问题3:条件判断
高级用法,添加规则条件,符合条件时update指定的属性值
-
点击ADVANCED
-
添加一个rule,如果id的值等于11,就修改id的值为22
-
结果输出:
问题4:将属性提取到内容
-
需要增加ReplaceText组件
${dict.51字段}
问题5:删除某一些的属性
(orderParties|containerList|goods)
-
UpdateAttribute(清除body以外属性)
(body.+)
Delete Attributes Expression
(SP.*\.[0-9]+.*)
Delete Attributes Expression
bkCargo.*
它表示要删除以 "bkCargo." 开头的所有属性。这种方式允许您一次性删除多个属性,只要它们都以相同的前缀开始。
举个例子,假设您有属性 bkCargo.name
、bkCargo.type
、bkCargo.weight
等等,使用 bkCargo.*
表达式会删除所有以 "bkCargo." 开头的属性,将它们从数据中删除。
问题6:日期获取
-
获取前一天的数据
dict.startTime:
${now():format("yyyy-MM-dd", "GMT"):toDate('yyyy-MM-dd'):addDays(0):format("yyyy-MM-dd", "GMT")}T00:00:00
dict.endTime:
${now():format("yyyy-MM-dd", "GMT"):toDate('yyyy-MM-dd'):addDays(0):format("yyyy-MM-dd", "GMT")}T23:59:59
-
获取前2个月至今的数据
dict.startTime:
${now():format("yyyy-MM", "GMT+8"):toDate('yyyy-MM'):addMonths(-1):format("yyyy-MM", "GMT")}-01T00:00:00
dict.endTime:
${now():format("yyyy-MM-dd", "GMT+8")}T${now():format("HH:mm:ss", "GMT+8")}
-
updateAttribute组件获取当前时间
${now():format('yyyy-MM-dd HH:mm:ss')}
问题7:JsonPath表达式解读
dict.BLiStotalNoofPackages
${bkCargo:jsonPath('$[?(@.cargoFlag in ["M"])]'):jsonPath('$.noOfPackage')}
这段代码是使用 JSONPath 表达式来从 JSON 数据中提取信息的。JSONPath 是一种类似于 XPath 的查询语言,用于从 JSON 结构中选择和提取数据。让我一步步解释这段代码的含义:
-
${bkCargo:jsonPath('$[?(@.cargoFlag in ["M"])]')}
: 这部分的含义是从一个名为bkCargo
的 JSON 对象中,使用 JSONPath 查询,筛选出具有cargoFlag
属性值为 "M" 的元素。换句话说,这部分代码会返回一个包含满足条件的货物的数组或集合。 -
:jsonPath('$.noOfPackage')
: 这部分的含义是在上一步得到的满足条件的货物数组中,再次使用 JSONPath 查询,提取每个货物元素的noOfPackage
属性值,即货物的包裹数量。
综合起来,整个代码的目的是从名为 bkCargo
的 JSON 数据中,选取具有 cargoFlag
属性值为 "M" 的货物,并且提取这些货物的包裹数量(noOfPackage
属性值)。最终,这段代码将会返回一个包含满足条件货物的包裹数量的数组或集合。
问题8:数据分流合并数据
8.1 初始化分段合并所需参数
infosp.count:
2
infosp.identifier:
${UUID()}
8.2 设置分段合并所需参数1
infosp.index:
1
8.2 设置分段合并所需参数2
infosp.index:
2
8.3 设置复原infosp分段参数
fragment.count:
${infosp.count}
fragment.identifier:
${infosp.identifier}
fragment.index:
${infosp.index}
问题9:多条件判断
dict.运输条款END2等于CY的时候等于Y
dict.运输条款END2等于CFS的时候等于S
dict.运输条款END2等于DOOR的时候等于D
${dict.运输条款END2:equals('CY'):ifElse('Y', ${dict.运输条款END2:equals('CFS'):ifElse('S', ${dict.运输条款END2:equals('DOOR'):ifElse('D', '')})})}
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 6鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 7鸿蒙HarmonyOS实战-ArkUI组件(GridRow/GridCol)
- 8[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 9鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版