Nifi ReplaceText Processor插入零长度字符串

Gre*_*een 2 apache-nifi

Apache Nifi ReplaceText处理器的运行方式不符合我的预期。我不知道为什么表达式求值会在数据应该插入的地方插入零长度的字符串。

ReplaceText处理器的配置为:

更换策略是:始终更换。

评估模式为:整个文本。

处理器链为:QueryDatabaseTable-> SplitAvro-> UpdateAttribute-> ReplaceText-> PutSQL

ReplaceText处理器中的替换值为:

INSERT INTO public.journal (payee, amount, billed_date, paid_date) 
VALUES ('${payee}', ${amount}, '${billed_date}', '${paid_date}');
Run Code Online (Sandbox Code Playgroud)

它应该变成……。

INSERT INTO public.journal (payee, amount, billed_date, paid_date) 
VALUES ('Dead End LLC', 2000.000, ‘2018-02-01’, ‘2018-02-01’);
Run Code Online (Sandbox Code Playgroud)

相反,我得到:

INSERT INTO public.journal (payee, amount, billed_date, paid_date) 
VALUES (‘’, , ‘’, ‘’);
Run Code Online (Sandbox Code Playgroud)

当我查看前面的UpdateAttribute处理器步骤的输出并看到时,这尤其令人沮丧。

[ {
  "payee" : "Dead End LLC",
  "amount" : "2000.00",
  "billed_date" : "2018-02-01",
  "paid_date" : "2018-02-02"
} ]
Run Code Online (Sandbox Code Playgroud)

这让我很伤脑筋,因为表达式处理似乎工作得很好,但没有提取正确的数据(我的幼稚实现假定存在该数据)。

以前的阅读使我到了现在:

数据库摘录

数据库插入

Bry*_*nde 5

获得空字符串的原因是因为“ $ {payee}”,$ {amount},“ $ {billed_date}”,“ $ {paid_date}”的表达式没有计算值,这是因为您可能没有具有具有这些名称的流文件属性。

您不能直接将流文件内容中Avro中的值转换为NiFi的表达语言,您需要首先将内容中的值提取到流文件属性中。

这样的事情可能会起作用...

QueryDatabaseTable-> SplitAvro-> ConvertAvroToJson-> EvaluteJsonPath-> UpdateAttribute-> ReplaceText-> PutSQL

在EvluateJsonPath中,您可以将json中的值提取到流文件属性中。