ConvertJSONtoSQL和Putsql-时间戳为null时出错

时间:2019-02-19 15:55:28

标签: apache-nifi

读取CSV并将数据插入表中。使用convertJsonToSQL并放置sql处理器。

要处理我正在使用的时间戳中的空值

1)EvaluateJsonPath(去除所有时间戳记字段并分配为sql.args.7.original)和

2)然后在其后使用ConvertJSONToSQL

3)我使用UpdateAttribute -在其中检查空值并分配空值,如果它们的原始值不为空,则分配相应的值。 (如果NULL sql.args.7.value = NULL)

如果存在非null值,则流程将完美运行。

如果存在空值,它将在PUTSQL处理器上出错,并显示以下错误“ sql.args.7.value的值为NULL,无法将其转换为时间戳”。

PS:我确实尝试通过带引号和不带引号的空字符串/ -1 / null。这些似乎不起作用。

更新:

如果值为空,则使用表达式名称:sql.args.7.value,值:null。

如果不是Null,则$ {sql.args.7.original:toDate(“ yyyy-MM-dd”):toNumber()}

我也尝试了不使用分配空值的情况。(例如,仅当该值不为空时才进行处理。该用例也会失败)

2 个答案:

答案 0 :(得分:0)

我认为,因为您的值位于属性中(对于PreparedStatement参数值)并且属性具有字符串值,所以您可能无法使用真实的null作为值,但我将对其进行研究。同时,也许尝试使用PutDatabaseRecord,它应该减轻了将JSON转换为SQL的需求,因此不对列值使用属性。

答案 1 :(得分:0)

使用 PreparedStatement 参数值和 PutSQL 处理器尝试插入空字符串 ('') 作为时间戳时,PostgreSQL 和 Nifi 遇到了这个问题。

此线程有助于捕获错误:https://dba.stackexchange.com/questions/145757/casting-empty-string-as-null-datetime

检查它是否为空字符串并在 INSERT 上转换为 NULL:

i