我正在用EvaluateJsonPath
读入一个文件。
某些属性值设置为空字符串。
当我处理日期时,这是非常有问题的。
如果我在调用插入或更新时使用TO_DATE
,并且DATE
是''
,则NiFi失败,因为例如
sql.args.2.value is '', which cannot be converted to a timestamp.
数据库设置为允许字段为空值。
当使用NiFi发送数据时,如果DATE
的值可能为空,并且null对条目有效,那么如何处理DATE
?
次更新
我创建了一个只有3列的测试表:id、TEST_DATE、TEST_TIMESTAMP。
使用NiFi处理器"PutSQL",当读入的数据中存在有效值时,我能够插入1列或两列。
问题是当数据不包含日期值,NiFi将其视为空""时,处理器尝试使用消息来源的空值""进行调用。
有没有办法在SQL INSERT语句中有条件地检查类似于NVL(?,NULL)的参数值?
1条答案
按热度按时间6kkfgxo01#
处理创建sql.args.#.value和空值时的解决方案如下。
在定义sql.args.#.value的UpdateAttributes处理器上,您可以在ADVANCED部分下创建一个RULE。
1.创建一个规则来检查用于设置值的属性是否不为空
${arg:isEmpty():not()}
1.创建sql.args.#.值并将其设置为
${arg}
只有在sql.args.#.value不为空时,此操作才会创建该值。在读入?(sql.args.#.values)的处理器上,它将使用空值代替"“空字符串值。在处理ORACLE数据库字段类型DATE和TIMESTAMP时,这会产生很大问题。
是的,我还验证了当您有许多值并且使用空值代替定义sql.args.#. value时,SQL是否正常工作。
例如,如果您有6个字段/值要设置,而第4个字段(sql.args.4.value)由于值为空而未设置,则语句仍将对其他字段正确工作。
SQL变量1.值=变量1 SQL变量2.值=变量2 SQL变量3.值=变量3 SQL变量5.值=变量5 SQL变量6.值=变量6