Apache nifi ApacheNIFI 1.7取代文本处理器进行时间戳操作
我试图使用Apache Nifi“替换文本”处理器从时间戳字段中提取年、月和日值:Apache nifi ApacheNIFI 1.7取代文本处理器进行时间戳操作,apache-nifi,Apache Nifi,我试图使用Apache Nifi“替换文本”处理器从时间戳字段中提取年、月和日值: Search value: "happened":"([^"]+)" Replacement Value: "happened":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("yyyy-MM-dd HH:mm:ss.SSS", '+00:00')}","year":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXX
Search value: "happened":"([^"]+)"
Replacement Value: "happened":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("yyyy-MM-dd HH:mm:ss.SSS", '+00:00')}","year":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("yyyy", '+00:00')}","month":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("MM", '+00:00')}","day":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("dd", '+00:00')}"
我正在尝试转换:
"happened":"2018-03-28T10:52:44.35+02:00"
到
这在ApacheNIFI 1.4中运行良好
然而,在Nifi 1.7中,我得到:
"happened":"2018-03-28 08:52:44.035","year":"","month":"","day":""
感谢您对这个问题的看法 如果您这样更改替换顺序,
$1
似乎只能评估一次:
"happened":,"year":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("yyyy", '+00:00')}","month":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("MM", '+00:00')}","day":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("dd", '+00:00')}""${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("yyyy-MM-dd HH:mm:ss.SSS", '+00:00')}","year":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("yyyy", '+00:00')}","month":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("MM", '+00:00')}","day":"${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("dd", '+00:00')}"
你得到这个:
"happened":,"year":"2018","month":"","day":"""","year":"","month":"","day":""
现在重点是如何解决问题,我不知道您的具体要求是什么,但对我来说最简单的方法是:
-将日期提取到属性。
-使用此属性构造所需的新值,如下面的表达式中所示
happenedData = ${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("yyyy-MM-dd HH:mm:ss.SSS", '+00:00')}
happened = "happened":"${happenedData}","year":"${happenedData:format("yyyy", '+00:00')}","month":"${happenedData:format("MM", '+00:00')}","day":"${happenedData:format("dd", '+00:00')}"
是的Óscar Andreu是正确的-
'$1'
仅在表达式范围内计算一次,即-${'$1'}
但是我找不到一种方法来提取一个临时变量并重用它
然而,我注意到,$1
可以多次使用。例如:
Occessed=“Occessed”:${'1':toDate(“yyyy-MM-dd'T'HH:MM:ss.SSSXXX”):格式(“yyyy-MM-dd-HH:MM:ss.SSS”,“+00:00”),“年”:“$1”,“月”:“$1”,天:$1”
产出:
“发生”:“2018-03-28 08:52:44.035”,“年”:“2018-03-28T10:52:44.35+02:00”,“月”:“2018-03-28T10:52:44.35+02:00”,“日”:“2018-03-28T10:52:44.35+02:00”
之后,我又使用了三个replacetextprocessor实例,分别用于年、月和日。看起来有点迟钝,但它是有效的
happenedData = ${'$1':toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("yyyy-MM-dd HH:mm:ss.SSS", '+00:00')}
happened = "happened":"${happenedData}","year":"${happenedData:format("yyyy", '+00:00')}","month":"${happenedData:format("MM", '+00:00')}","day":"${happenedData:format("dd", '+00:00')}"