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操作生成了键,并且允许<获得生成键>,该属性将被添加到输出流。该功能可能不被所有数据库支持。 |
状态管理:
该组件不保存状态。
限制:
该组件没有限制
输入流要求:
组件必须提供输入流。
系统资源考量:
未提供。