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,可将该参数置空。 支持表达式语言 (支持流属性和变量) | ||
表名 | 生效语句的数据库表名 支持表达式语言 (支持流属性和变量) | ||
转换字段名 | 不转换 | - 转换 - 不转换 | 是否尝试适当第转换字段名为数据库可接受的表字段名。否则输入记录字段名必须精确匹配数据库的字段名,不然则数据库字段将不被更新。 |
数据流字段不匹配处理 | 忽略 | - 忽略 - 失败 | 如果输入数据流记录中有一字段不匹配数据库表的字段,该参数决定如何处理这种情况。 |
数据库字段不匹配处理 | 失败 | - 忽略 - 警告 - 失败 | 如果数据库表的字段没有一个输入数据流记录的字段所匹配,该参数决定如何处理这种情况。 |
更新字段 | 用于数据库做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'连线输出,该属性将被用来记录发生的错误 |
状态管理:
该组件不保存状态。
限制:
该组件没有限制
输入流要求:
组件必须提供输入流。
系统资源考量:
未提供。