【问题标题】:Nifi ReplaceText Processor inserting zero length stringsNifi ReplaceText处理器插入零长度字符串
【发布时间】:2018-07-02 18:26:39
【问题描述】:

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"
} ]

这让我大吃一惊,因为表达式处理似乎工作得很好,但没有提取正确的数据(我的幼稚实现假设会在那里。)

以前的阅读让我走到了现在:

Database Extract

Database Insert

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

    您得到空字符串的原因是因为 '${payee}', ${amount}, '${billed_date}', '${paid_date} 的表达式评估为没有值,那是因为您可能没有具有这些名称的流文件属性。

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

    这样的事情可能会奏效......

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

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

    【讨论】:

    • 谢谢!在将 JSON 路径值添加到 EvaluateJsonPath 处理器后,它就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2015-09-14
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多