读取CSV并将数据插入到表中。使用convertJsonToSQL和put sql处理器。
来处理我正在使用的时间戳中的空值
1) EvaluateJsonPath (去掉所有时间戳字段,赋值为sql.args.7.original)和
2)然后使用ConvertJSONToSQL,之后
3)我使用UpdateAttribute --我检查null并分配空值,如果它们的原始值不是null,则分配相应的值。(如果NULL sql.args.7.value = NULL)
如果存在非空值,则该流可以完美地工作。
如果存在NULL值,则在PUTSQL处理器上会出错,并显示以下错误:"the value of sql.args.7.value is NULL there be converted to timestamp“。
PS:我确实尝试传递空字符串/-1/null,带引号和不带引号。这些似乎不起作用。
更新:
值为null时使用的表达式名称: sql.args.7.value,value : null。
如果不为空,则为${sql.args.7.original:toDate("yyyy-MM-dd"):toNumber()}
我也试过了,没有使用赋空值。(例如,仅当值不为空时才进行处理。该用例也会失败)
发布于 2019-02-20 04:27:02
我认为因为您的值在属性中(对于PreparedStatement参数值),并且属性具有字符串值,所以您可能无法拥有真正的null作为值,但我将对此进行研究。同时,也许可以尝试PutDatabaseRecord,这将减少将JSON转换为SQL的需要,从而不使用列值的属性。
发布于 2021-01-20 01:17:31
使用PreparedStatement参数值和PutSQL处理器,PostgreSQL和Nifi尝试插入空字符串('')作为时间戳,这就解决了这个问题。
这个线程帮助捕获了错误:https://dba.stackexchange.com/questions/145757/casting-empty-string-as-null-datetime
检查它是否为空字符串,并在插入时转换为NULL:
INSERT INTO abc (col_a, timestamp)
VALUES (?, cast(NULLIF(?,'') as timestamp));https://stackoverflow.com/questions/54770268
复制相似问题