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 语句可能不会执行任何操作(如未找到具有新主键值的现有记录),或者可能无意中损坏现有数据(通过更改存在新主键值的记录)。

标签

database、delete、insert、jdbc、put、record、sql、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,并且该属性将填充错误的原因。

用例

将记录插入到一个数据库

语言: 中文