Skip to main content

PutDatabaseRecord

描述:

使用特殊的记录读取器将输入数据流的记录(可能多个)写入数据库。 记录将被转换成SQL语句并被批量执行。 如果有错误发生,数据流将通过'failure'或者'retry'连线输出,如果记录都传输成功,则输入数据流将通过'success'连线输出. 语句类型通过该组件提供参数选择'INSERT'、'UPDATE'和'DELETE',以及通过参数 '使用statement.type属性'(来自于输入数据流上的属性)来指定。 注意:如果语句类型是'UPDATE',则输入数据流的记录不能用于改变主键(或用户指定的更新键)的值。如果遇到此种情况,向数据库发出的UPDATE语句可能什么也不做(如果不存在于记录中的新的主键值没有找到)。或者可能无意中破坏现有数据(通过更改主键的更新值所在的记录)。

标签:

sql, record, jdbc, put, database, update, insert, delete, 数据库, 更新, 插入, 删除

参数:

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

名字默认值允许值列表描述
记录读取器控制器服务API:
RecordReaderFactory
实现:
ParquetReader
GrokReader
SyslogReader
Syslog5424Reader
CSVReader
AvroReader
JsonPathReader
JsonTreeReader
ScriptedReader
XMLReader
指定用于解析输入数据流数据格式的服务
语句类型
- UPDATE
- INSERT
- DELETE
- 使用statement.type属性设置
指定生成SQL语句的类型。如果选择'使用statement.type属性设置',那么将从数据流上读取该属性。
数据库连接池控制器服务API:
DBCPService
实现:
DBCPConnectionPoolLookup
DBCPConnectionPool
用于创建数据库连接池的服务
Catalog名用于更新语句的数据库Catalog名字。如果数据库不支持Catalog,可将该参数置空。

支持表达式语言 (支持流属性和变量)
Schema名指定数据库表的Schema名。如果数据库不支持Catalog,可将该参数置空。

支持表达式语言 (支持流属性和变量)
表名生效语句的数据库表名

支持表达式语言 (支持流属性和变量)
转换字段名不转换
- 转换
- 不转换
是否尝试适当第转换字段名为数据库可接受的表字段名。否则输入记录字段名必须精确匹配数据库的字段名,不然则数据库字段将不被更新。
数据流字段不匹配处理忽略
- 忽略任何不能匹配数据库的字段都将被忽略
- 失败如果有任何一个字段不能匹配数据库的字段,则数据流将输出到'failure'连线
如果输入数据流记录中有一字段不匹配数据库表的字段,该参数决定如何处理这种情况。
数据库字段不匹配处理失败
- 忽略任何数据库表的字段没有一个输入记录字段匹配,则假定该字段为不必须,并忽略
- 警告任何数据库表的字段没有一个输入记录字段匹配,则假定该字段为不必须,并记录警告日志
- 失败如果数据库表的字段没有一个输入记录字段匹配,则数据流处理将失败,并记录错误日志
如果数据库表的字段没有一个输入数据流记录的字段所匹配,该参数决定如何处理这种情况。
更新字段用于数据库做UPDATE更新操作的字段列表,且由英文逗号分隔多个字段名。如果<语句类型>为'UPDATE'且不设置改参数,则视为自动使用数据库的主键列表,如果表没有主键且’数据库字段不匹配处理‘被设置为'失败',则转换SQL将失败。如果<语句类型>是'INSERT'则忽略该参数。

支持表达式语言 (支持流属性和变量)
包含SQL的字段如果语句类型是'SQL' (通过'statement.type'属性),该参数指定那些输入记录字段中包含有SQL语句并将执行。字段值必须是简单的SQL语句。如果语句类型不是'SQL',将忽略该参数。

支持表达式语言 (支持流属性和变量)
转义字段名不转义
- 转义
- 不转义
是否支持将所有字段都转义,这样就可以用一些特殊字符作为数据库表字段名的一部分。
转义表名不转义
- 转义
- 不转义
是否支持将一些特殊字符作为数据库表名的一部分。
查询超时0 seconds允许执行SQL语句的最大等待时间,0表示无限制,且小于1秒被视为等同0秒。

支持表达式语言 (仅支持变量)
事务处理方式当前组件处理事务
- 下游组件处理事务
- 当前组件处理事务
是否在下游组件(CommitDatabase、RollbackDatabase)中处理事务。如果选择下游组件处理事务,通过键值存储服务存储数据库连接,并且在下游服务中,通过database.connection.identifier获取数据库连接,做提交&回滚操作。
数据库事务会话服务控制器服务API:
KeyValueLookupService
实现:
CommonKeyValueLookupService
指定用于关联数据流下游数据库事务连接的会话服务
数据库事务关联属性名database.connection.identifier用于作为数据流属性的数据库事务关联名字,如果为空或变量计算值为空,则默认为'database.connection.identifier'

支持表达式语言 (支持流属性和变量)
失败回滚不回滚
- 回滚
- 不回滚
指定如何处理执行错误情况,默认情况下('否'),如果在处理数据量时有错误发生,那么数据流将根据错误类型来决定通过'failure'或者'retry'连线输出,并使得组件可以继续下一个数据流处理。反之,如果想要回滚当前处理的数据流并立即停止其他处理,则可将该选项设置为'是'。并且失败的数据流将保留在输入连线上而不会启用惩罚模式,直到可继续处理成功或选择其他方式处理。同时需要注意非常重要的一点就是适当加大'等待时长'设置,以应对重试过于频繁的情况。

连线:

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

读取属性:

名字描述
statement.type如果选择<语句类型>的'使用statement.type属性',该属性值将被用来决定语句类型的生成和执行,比如INSERT, UPDATE, DELETE, SQL,等等

写入属性:

名字描述
putdatabaserecord.error在执行处理过程中,如果有错误,数据流将通过'failure'或'retry'连线输出,该属性将被用来记录发生的错误

状态管理:

该组件不保存状态。

限制:

该组件没有限制

输入流要求:

组件必须提供输入流。

系统资源考量:

未提供。