Nifi - 转换以前保存的 now() 属性
Nifi - Converting previously saved now() in attribute
我使用 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")}
我怀疑你只是没有找到合适的表达语言。这有时会很棘手,尤其是格式化时间戳和“数学”...
另外一个建议:不要在流程中OVERCHECK流程表现。这并不是真正的最佳实践概念。我不知道你的用例,我是 NiFi 无所不能的真正拥护者。我在生产中创建了许多流程,但从未检查过流程中的流程计时。
我找到了一个解决方案,但它看起来像一个 hack
${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()}
我使用 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")}
我怀疑你只是没有找到合适的表达语言。这有时会很棘手,尤其是格式化时间戳和“数学”...
另外一个建议:不要在流程中OVERCHECK流程表现。这并不是真正的最佳实践概念。我不知道你的用例,我是 NiFi 无所不能的真正拥护者。我在生产中创建了许多流程,但从未检查过流程中的流程计时。
我找到了一个解决方案,但它看起来像一个 hack
${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()}