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}');
它应该变成...。
INSERT INTO public.journal (payee, amount, billed_date, paid_date)
VALUES ('Dead End LLC', 2000.000, ‘2018-02-01’, ‘2018-02-01’);
相反,我得到了:
INSERT INTO public.journal (payee, amount, billed_date, paid_date)
VALUES (‘’, , ‘’, ‘’);
当我查看前面的UpdateAttribute处理器步骤的输出并看到…时,这尤其令人沮丧。
[ {
"payee" : "Dead End LLC",
"amount" : "2000.00",
"billed_date" : "2018-02-01",
"paid_date" : "2018-02-02"
} ]
这使我很伤脑筋,因为表达式处理似乎可以正常工作,但不能提取正确的数据(我的幼稚实现假定存在该数据)。
以前的读物使我进入了现在的位置
答案 0 :(得分:5)
获取空字符串的原因是因为'$ {payee}',$ {amount},'$ {billed_date}','$ {paid_date}'的表达式没有任何值,这是因为您可能没有带有这些名称的流文件属性。
您不能直接将流文件内容中Avro中的值转换为NiFi的表达语言,您需要首先将内容中的值提取到流文件属性中。
类似的事情可能会起作用...
QueryDatabaseTable-> SplitAvro-> ConvertAvroToJson-> EvaluteJsonPath-> UpdateAttribute-> ReplaceText-> PutSQL
在EvluateJsonPath中,您可以将json中的值提取到流文件属性中。