读取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()}
我也尝试了不使用分配空值的情况。(例如,仅当该值不为空时才进行处理。该用例也会失败)
答案 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