Skip to main content

PutSQL

描述:

执行UPDATE或INSERT的SQL语句。输入数据流的内容将被作为SQL语句执行。SQL语句可能带有问号字符'?'来模糊指定参数,此时,输入数据流上必须提供相关参数是属性,且名字为'sql.args.N.type'和'sql.args.N.value',其中N表示参数位置索引序列。 'sql.args.N.type'是JDBC数据库类型的数字值。输入数据流的内容要求是UTF-8编码格式。

标签:

sql, put, rdbms, database, update, insert, relational, 数据库, 更新, 插入

参数:

如下列表中,必填参数则标识为加粗. 其他未加粗参数,则表示为可选参数。表中同时提到参数默认值设置, 并且 参数还支持 表达式语言.

名字默认值允许值列表描述
JDBC数据库连接池控制器服务API:
DBCPService
实现:
DBCPConnectionPoolLookup
DBCPConnectionPool
用于创建数据库连接池的服务
SQL语句用于执行的SQL语句,该参数可为空,普通字符串或带变量表达式的字符串。如果指定了此属性,则无论输入数据流的内容如何,都将使用它。 如果此属性为空,则输入数据流的内容必须是有效的SQL语句,并将被数据库执行。

支持表达式语言 (支持流属性和变量)
支持分段事务支持
- 支持
- 不支持
当输入数据流被处理时,将检查数据流上的属性'fragment.identifier'和'fragment.count'值。如果'fragment.count'值大于1,组件将不处理任何输入数据流直到'fragment.identifier'所指定的所有数据流都可用。也就是说,所有相同id的数据流将作为数据库的单一事务一并按'fragment.index'序号按序处理。这就是支持数据库的SQL原子性操作。如果不支持,将忽略这些属性设置且更新将分别独立的执行
事务超时如果支持分段事务,指定需等待多长时间来处理所有输入数据流,否则将通过'failure'连线输出
分批数量100在一个事务中放入数据库的输入数据流的最优数量
获得生成键
- 是
- 否
是否返回数据库自动生成的键,并写入数据流的属性sql.generate.key. 这可能导致性能稍微低下且并不是所有数据库都支持。
失败回滚不回滚
- 回滚
- 不回滚
指定如何处理执行错误情况,默认情况下('否'),如果在处理数据量时有错误发生,那么数据流将根据错误类型来决定通过'failure'或者'retry'连线输出,并使得组件可以继续下一个数据流处理。反之,如果想要回滚当前处理的数据流并立即停止其他处理,则可将该选项设置为'是'。并且失败的数据流将保留在输入连线上而不会启用惩罚模式,直到可继续处理成功或选择其他方式处理。同时需要注意非常重要的一点就是适当加大'等待时长'设置,以应对重试过于频繁的情况。

连线:

名字描述
retry如果数据库不能更新但可通过再次尝试操作可能成功时,数据流将通过此连线输出
success成功执行SQL语句后,数据流通过此连线输出
failure如果数据库不能更新并通过再次尝试操作还是失败,例如无效查询或违反SQL约束规范,数据流将通过此连线输出

读取属性:

名字描述
fragment.identifier如果支持分段事务,该属性用于决定是否将两个数据流归到相同的事务中
fragment.count如果支持分段事务,该属性用于决定多少个输入数据流作为一个事务处理
fragment.index如果支持分段事务,该属性用于决定事务处理的先后顺序
sql.args.N.type用于输入数据流的参数化的SQL语句。每个参数类型是对应一个JDBC数据库类型的整数值
sql.args.N.value用于输入数据流的参数化的SQL语句。参数值通过设置诸如 sql.args.1.value, sql.args.2.value, sql.args.3.value,等等。 sql.args.1.value参数值所对应的类是通过sql.args.1.type属性指定
sql.args.N.format用于输入数据流的参数化的SQL语句的可选属性,但是默认值可能不能适应数据流数据。在一些情况下,需要特殊指定数据格式,当前可用类型为二进制数据类型, 日期, 时间和时间戳. 其中二进制类型 (默认为'ascii'). 该格式可使用Avro格式。 base64字符串可用于解码为字节数, hex 16进制字符串是所有字符串大写,且没有'0x'开头。 Dates/Times/Timestamps 的 Date, Time 以及 Timestamp 格式支持自定义的 ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME'),并于java.time.format.DateTimeFormatter 对应。如果不指定,则为长整型值的毫秒数,或者为字符串'yyyy-MM-dd'格式的Date, 'HH:mm:ss.SSS'格式的Time (一些数据库不支持毫秒数的日期,比如 Derby 或 MySQL), 'yyyy-MM-dd HH:mm:ss.SSS' 格式的Timestamp

写入属性:

名字描述
sql.generated.key如果数据库INSERT操作生成了键,并且允许<获得生成键>,该属性将被添加到输出流。该功能可能不被所有数据库支持。

状态管理:

该组件不保存状态。

限制:

该组件没有限制

输入流要求:

组件必须提供输入流。

系统资源考量:

未提供。

参考:

ConvertJSONToSQL