PutDatabaseRecord 2025.5.31.15¶
捆绑包¶
org.apache.nifi | nifi-standard-nar
描述¶
PutDatabaseRecord 处理器使用指定 RecordReader 从传入 FlowFile 中输入(可能是多条)记录。这些记录被转换为 SQL 语句,并作为单个事务执行。如果发生任何错误,FlowFile 将路由到 failure 或 retry,如果成功传输了记录,则传入的 FlowFile 将路由到 success。 处理器执行的语句类型通过语句类型属性指定,该属性接受一些硬编码值,例如 INSERT、UPDATE 和 DELETE,以及“使用 statement.type 属性”,后者使处理器从 FlowFile 属性中获取语句类型。IMPORTANT:如果语句类型为 UPDATE,则传入记录不得更改主键(或用户指定的更新键)的值。如果遇到此类记录,向数据库发出的 UPDATE 语句可能不会执行任何操作(如未找到具有新主键值的现有记录),或者可能无意中损坏现有数据(通过更改存在新主键值的记录)。
输入要求¶
REQUIRED
支持敏感的动态属性¶
false
属性¶
属性 |
描述 |
---|---|
列名转换模式 |
列名将使用此正则表达式实现标准化 |
列名转换策略 |
用于标准化表列名的策略。无论策略如何,列名都将采用大写形式,以执行不区分大小写的匹配 |
数据记录路径 |
如果指定,则此属性表示一个 RecordPath,将根据每条传入记录进行评估,通过评估 RecordPath 得出的记录将发送到数据库,而非发送整条传入的记录。如果未指定,则整条传入的记录将发布到数据库。 |
数据库方言服务 |
数据库方言服务,用于生成特定于某服务或供应商的语句。 |
删除键 |
逗号分隔式列名列表,用于唯一标识数据库中的某一行,用于 DELETE 语句。如果语句类型为 DELETE 且未设置此属性,则使用表的列。如果语句类型不是 DELETE,则忽略此属性 |
语句类型记录路径 |
指定一个 RecordPath,用于针对每条记录进行评估,以确定语句类型。RecordPath 应等同于 INSERT、UPDATE、UPSERT 或 DELETE。(同时支持 Debezium 风格的操作类型:“r”和“c”表示 INSERT,“u”表示 UPDATE,“d”表示 DELETE) |
database-session-autocommit |
设置在所用数据库连接上的自动提交模式。如果设置为 false,则将明确提交或回滚操作(分别基于成功或失败)。如果设置为 true,则驱动程序/数据库会自动处理提交/回滚。 |
db-type |
用于生成特定于某服务或供应商的语句的数据库类型。通用类型支持大多数情况,但选择特定类型可以实现最佳处理或附加功能。 |
put-db-record-allow-multiple-statements |
如果语句类型为“SQL”(在 statement.type 属性中设置),则此字段指示是否用分号分隔字段值并分别执行每条语句。如果任何语句导致错误,则回滚整组语句。如果语句类型不是“SQL”,则忽略此字段。 |
put-db-record-binary-format |
将字符串值解码为二进制时要应用的格式。 |
put-db-record-catalog-name |
语句应更新的目录的名称。这可能不适用于您正在更新的数据库。在此类情况下,应将该字段留空。请注意,如果设置了该属性并且数据库区分大小写,则目录名称必须与数据库的目录名称完全匹配。 |
put-db-record-dcbp-service |
用于获取与数据库的连接以发送记录的控制器服务。 |
put-db-record-field-containing-sql |
如果语句类型为“SQL”(在 statement.type 属性中设置),则此字段表示记录中的哪个字段包含要执行的 SQL 语句。该字段的值必须是单独一条 SQL 语句。如果语句类型不是“SQL”,则忽略此字段。 |
put-db-record-max-batch-size |
指定发送到数据库的每个批次中包含的 sql 语句数上限。如果值为零,则表示批次大小不受限制,所有语句都放在一个批次中,这可能导致在处理大量语句时出现内存使用率过高的问题。 |
put-db-record-query-timeout |
允许正在运行的 SQL 语句运行的最长时间量,零表示没有限制。如果最长时间小于 1 秒,则视同为零。 |
put-db-record-quoted-identifiers |
启用此选项将导致所有列名都被置于引号之间,从而允许您在表中使用保留字作为列名。 |
put-db-record-quoted-table-identifiers |
启用此选项将导致表名被置于引号之间,以支持在表名中使用特殊字符。 |
put-db-record-record-reader |
指定用于解析传入数据和确定数据架构的控制器服务。 |
put-db-record-schema-name |
表所属的架构的名称。这可能不适用于您正在更新的数据库。在此类情况下,应将该字段留空。请注意,如果设置了该属性并且数据库区分大小写,则架构名称必须与数据库的架构名称完全匹配。 |
put-db-record-statement-type |
指定要生成的 SQL 语句的类型。有关每项操作行为的描述,请参阅数据库文档。请注意,某些数据库类型可能不支持某些语句类型。如果选择“使用 statement.type 属性”,则该值取自 FlowFile 中的 statement.type 属性。“使用 statement.type 属性”选项是唯一允许“SQL”语句类型的选项。如果指定了“SQL”,则由“包含 SQL 的字段”属性指定的字段值应是目标数据库上的有效 SQL 语句,并且按照原样执行。 |
put-db-record-table-name |
该语句应影响的表的名称。请注意,如果数据库区分大小写,则表名称必须与数据库的表名称完全匹配。 |
put-db-record-translate-field-names |
如果为 true,处理器将尝试将字段名称转换为指定表的相应列名称。如果为 false,则字段名称必须与列名称完全匹配,否则该列将不会更新 |
put-db-record-unmatched-column-behavior |
如果传入记录没有数据库表所有列的字段映射,则此属性指定应如何处理这种情况 |
put-db-record-unmatched-field-behavior |
如果传入记录的字段未映射到数据库表的任何列,则此属性指定应如何处理这种情况 |
put-db-record-update-keys |
逗号分隔式列名列表,用于唯一标识数据库中的某一行,用于 UPDATE 语句。如果语句类型为 UPDATE 且未设置此属性,则使用表的主键。在这种情况下,如果不存在主键,则将无匹配的列行为设置为 FAIL,转换到 SQL 的操作将会失败。如果语句类型为 INSERT,则忽略此属性 |
rollback-on-failure |
指定如何处理错误。默认情况 (false) 下,如果在处理 FlowFile 时发生错误,则 FlowFile 将根据错误类型路由到“failure”或“retry”关系,处理器可以继续处理下一个 FlowFile。相反,您可能需要回滚当前已处理 FlowFiles 并立即停止进一步处理。在这种情况下,您可以通过启用此“失败时回滚”属性来实现此操作。 如果启用,失败的 FlowFiles 将保留在输入关系中,而不会对其进行惩罚,并且会反复处理直至成功处理或通过其他方式将其移除为止。务必设置足够的“结果持续时间”,以避免过于频繁地重试。 |
table-schema-cache-size |
指定应缓存多少个表架构 |
关系¶
名称 |
描述 |
---|---|
failure |
如果无法更新数据库,则将一个 FlowFile 路由到此关系,重试此操作也会失败,例如查询无效或违反完整性约束 |
retry |
如果无法更新数据库,则将一个 FlowFile 路由到此关系,但再次尝试操作可能会成功 |
success |
成功从 SQL 查询结果集创建了 FlowFile。 |
写入属性¶
名称 |
描述 |
---|---|
putdatabaserecord.error |
如果在处理过程中发生错误,FlowFile 将路由到 failure 或 retry,并且该属性将填充错误的原因。 |
用例¶
将记录插入到一个数据库 |