Update Processor返回空字符串:在NIFI中将字符串日期转换为long

时间:2018-01-30 21:42:18

标签: apache-nifi

将图像上提到的格式的字符串日期转换为数字(长),但我得到的输出是空字符串。

使用JSON读写器;

其中在输入JSON中它是一个字符串,在输出JSON中它是long类型。

尝试将输出JSON类型保留为String并尝试计算以下表达式,但这也是空字符串

$ {DATE1.value:toDate('yyyy-MM-dd HH:mm:ss'):toNumber():toString()}

尝试转换的示例数据:{“DATE1”:“2018-01-17 00:00:00”}

尝试按照此link的解决方案,但仍然是空字符串。

enter image description here

2 个答案:

答案 0 :(得分:4)

方法1:参考流文件的内容: -

如果您想根据内容中的字段值更改DATE1值,则需要引用 field.value

  

替代价值策略

     

字面值

<强> // DATE1 $ {field.value:toDate('yyyy-MM-dd HH:mm:ss'):toNumber()}

从内容中引用DATE1值,然后将表达式语言应用于它。 UpdateRecord Config

Avro Schema Registry: -

  

{“namespace”:“nifi”,“name”:“balances”,“type”:“record”,
  “田地”:[       {“name”:“DATE1”,“type”:“string”}]}

从内容中读取DATE1字段值作为字符串。

<强> JsonRecordSetWriter: -

  

{“namespace”:“nifi”,“name”:“balances”,“type”:“record”,
  “田地”:[       {“name”:“DATE1”,“type”:“long”}]}

在SetWriter中,将DATE1配置为Long类型。

<强>输入: -

{“DATE1”:“2018-01-17 00:00:00”}

<强>输出: -

[{ “DATE1”:1516165200000}]

(或)

方法2:参考流文件的属性: -

如果你将DATE1作为流文件的属性,值为2018-01-17 00:00:00,我们将使用DATE1属性而不是field.value(它指的是flowfile的内容)

然后UpdateRecord Configs将

替代价值策略

  

字面值

//DATE1
${DATE1:toDate('yyyy-MM-dd HH:mm:ss'):toNumber()}

在这个Expression中我们使用DATE1属性来更新flowfile的内容。 两种方法都会产生相同的输出。

答案 1 :(得分:0)

在使用isEmpty()和ifElse()转换为Date之前检查值。

${field.value:isEmpty():ifElse('', ${field.value:toDate('yyyy-MM-dd HH:mm:ss'):toNumber()})}