如何解决Nifi-将先前保存的now转换为属性
我使用UpdateAttribute检查速度较慢的处理器的时间。第一个UpdateAttribute具有DATA_START ${now()}
,而第二个具有DATA_STOP ${now()}
属性。慢速处理器位于两者之间。
我一直试图将DATA_START
转换为数字,所以我可以计算出时差。
${now():toNumber():minus(${DATA_START:toNumber()}):format("HH:mm:ss")}
不幸的是,这不起作用。问题在这部分${DATA_START:toNumber()}
中。 NiFi无法将先前保存的now()
转换为数字。
我的流程中有很多计时器,因此添加包含${now():toNumber()}
的新属性会很麻烦。
是否可以将toNumber()
应用于先前保存的now()
?
format
和toDate()
的各种类型无效。
解决方法
@Alex为什么不存储原始值并将其用于差异检查?如果您需要同时转换为人类可读格式,则仍然可以完成。解决方案是仅创建2个属性,而不是一个。
DATA_START_RAW = ${now()}
DATA_START_FORMATED = ${now():toNumber():format("HH:mm:ss")}
我确实怀疑您只是找不到正确的表达语言。有时这可能很棘手,尤其是在格式化了时间戳记和“数学”的情况下……
另一个建议:不要过分检查流程中的流程性能。这实际上不是最佳实践概念。我不知道您的用例,我是NiFi可以做任何事情的忠实拥护者。我在生产中创建了许多流程,但从未检查流程中的流程时间。
,我找到了一个解决方案,但看起来像个黑客
${now():toNumber():minus(${DATA_START:format('yyyy-MM-dd HH:mm:ss'):toDate('yyyy-MM-dd HH:mm:ss'):toNumber()}):divide(1000)}
由于某些原因,NiFi认为先前保存的now()
不是数据。我将其转换为字符串,然后将其转换回日期,最后,我可以得到一个时间戳。时间戳可以被操纵,这就是我所需要的。
${DATA_START:format('yyyy-MM-dd HH:mm:ss'):toDate('yyyy-MM-dd HH:mm:ss'):toNumber()}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。