Apache nifi 如何生成flowfile属性的哈希(其中一些)

Apache nifi 如何生成flowfile属性的哈希(其中一些),apache-nifi,Apache Nifi,我有一个flowfile,有3个属性a、b、c。我想创建两个新属性a_b_hash,c_hash a_b_hash = hash of (value of a + '_' + value of b) c_hash = hash of c 因此,最后我需要5个属性a,b,c,a\u b\u hash,c\u hash。a、b、c保持不变 我尝试了不同的组合,但无法生成哈希。有些排列是有效的,但我不知道它是否生成了正确的has 更新 我创建了以下模板并运行了它。我希望a\u hash和c\u h

我有一个
flowfile
,有3个属性a、b、c。我想创建两个新属性
a_b_hash
c_hash

a_b_hash = hash of (value of a + '_' + value of b)
c_hash = hash of c
因此,最后我需要5个属性
a
b
c
a\u b\u hash
c\u hash
。a、b、c保持不变

我尝试了不同的组合,但无法生成哈希。有些排列是有效的,但我不知道它是否生成了正确的has


更新

我创建了以下模板并运行了它。我希望
a\u hash
c\u hash
具有相同的值,
a
c
具有相同的值


ae48862f-0165-1000-cc45-c1efcbb7ff08dnu-hash-attribute91ef00b9-6cd0-3fed-0000-000000000000 5842A0B1-f01b-3160-0000-00000001 GB100005842a0b1-f01b-3160-0000-000000000000000000 5CF06895-44e9-3f64-0000-0000000处理器0SEC1成功5842A0B1-f01b-3160-0000-000000000000 9B4DD5B8-8718-3f54-0000-000000000000处理器02FBFD09E-72e8-3c46-0000-000000000000000000 5842A0B1-f01b-3160-0000-0000000000001 GB100005842a0b1-f01b-3160-0000-000000000000 AB89E6D1-f08e-32be-0000-000000000000000000处理器0sec1success5842a0b1-f01b-3160-0000-0000000000005cf06895-44e9-3f64-0000-000000000000处理器04E1F1096-d302-35f8-0000-0000000000000000005842A0B1-f01b-3160-0000-0000000000001 GB100005842a0b1-f01b-3160-0000-000000000009B4DD5B8-8718-3f54-0000-000000000000000000处理器0sec1success5842a0b1-f01b-3160-0000-000000000000509810d8-4798-30e5-0000-000000000000处理器09b4dd5b8-8718-3f54-0000-000000000000 5842a0b1-f01b-3160-0000-000000 89.149688895009349271.1685572155761

NiFi附带一个名为
HashAttribute
的处理器。其用法类似于,您可以添加动态属性,其中新属性的名称将是流文件的名称,并且值是正则表达式,您可以提供
(?s)(^.*$)
来捕获流文件属性的整体值

流量

HashAttribute-a和b

HashAttribute-c

结果流文件属性


您可能希望使用ApacheNIFI 1.8.0-SNAPSHOT(1.8.0尚未发布)中提供的
CryptographicHashAttribute
。我希望在1.8.0中描述的新功能发布后,我会弃用
HashAttribute
,并提供它(我有一个分支即将完成,但最近一直在处理一些其他优先事项)


现在,该行为不允许任意字符串连接,因此必须使用
UpdateAttribute
处理器用表达式语言表达式
${a}{u${b}
填充属性a_b以执行连接,然后
HashAttribute
a_b_hash->
a_b
,将属性匹配策略设置为
Individual
。c_hash->
c
可以在没有任何额外处理器的情况下完成

请看我的更新。要么我做错了什么,要么我无法解释为什么相同的字符串值会生成两个不同的散列。这是因为它将键和值散列在一起。因此,即使您有相同的值,键(即FlowFile属性名称)也是不同的,这就是为什么您会得到不同的值。看看这个街区: