PutDatabaseRecord

文档中心 › 组件索引 › PutDatabaseRecord

PutDatabaseRecord Processor

类型全限定名:cn.org.acal.lynxus.processors.standard.PutDatabaseRecord

所属 Bundle:cn.org.acal.lynxus:lynxus-standard-nar:2.11.8

描述

PutDatabaseRecord 处理器使用指定的记录读取器从传入 FlowFile 输入(可能是多条)记录,并将这些记录写入数据库。

标签

sqlrecordjdbcputdatabaseupdateinsertdelete

使用场景

将记录插入数据库

属性

下表中,加粗的属性为必填项;其余为可选项。表格同时标注默认值、是否支持表达式语言,以及是否为敏感属性(值会被加密)。

名称默认值可选值描述
Record Reader控制器服务 API:
RecordReaderFactory
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定用于解析传入数据并确定数据模式的 Controller Service。
数据库类型Generic
  • Database Dialect Service — 需要为 SQL 语句配置 Database Dialect Service
  • Generic — 生成 ANSI SQL
  • Oracle — 生成符合 Oracle 规范的 SQL
  • Oracle 12+ — 生成符合 Oracle 规范的 SQL(12 或更高版本)
  • MS SQL 2012+ — 生成兼容 MS SQL 的 SQL(2012 或更高版本)
  • MS SQL 2008 — 生成兼容 MS SQL 的 SQL(2008 版本)
  • MySQL — 生成兼容 MySQL 的 SQL
  • PostgreSQL — 生成兼容 PostgreSQL 的 SQL
  • Phoenix — 生成符合 Phoenix 规范的 SQL
用于生成特定于服务或供应商的语句的数据库类型。通用类型支持大多数情况,但选择特定类型可以启用优化处理或额外功能。
Database Dialect Service控制器服务 API:
DatabaseDialectService
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
数据库方言服务,用于生成特定于特定服务或供应商的语句。
Statement Type
  • UPDATE
  • INSERT
  • UPSERT
  • INSERT_IGNORE
  • DELETE
  • Use statement.type Attribute
  • Use Record Path
指定要生成的 SQL 语句类型。请参阅数据库文档了解每种操作的行为说明。请注意,某些数据库类型可能不支持特定的语句类型。如果选择'使用 statement.type 属性',则值取自 FlowFile 中的 statement.type 属性。'使用 statement.type 属性'选项是唯一允许'SQL'语句类型的选项。如果指定'SQL',则'包含 SQL 的字段'属性指定的字段值必须是目标数据库上的有效 SQL 语句,并将按原样执行。
Statement Type Record Path指定一个 RecordPath,用于对每个 Record 进行评估以确定语句类型。RecordPath 的计算结果应为 INSERT、UPDATE、UPSERT 或 DELETE。(也支持 Debezium 风格的操作类型:"r" 和 "c" 表示 INSERT,"u" 表示 UPDATE,"d" 表示 DELETE)
Data Record Path如果指定,此属性表示一个 RecordPath,将对每个传入的 Record 进行评估,评估 RecordPath 后得到的 Record 将被发送到数据库,而不是发送整个传入的 Record。如果未指定,整个传入的 Record 将被发布到数据库。
Pre-Processing SQL在为每个 FlowFile 处理记录之前,在当前数据库连接上执行的一条或多条以分号分隔的 SQL 语句。 可以通过在分号前加反斜杠字符,在 SQL 语句中包含字面分号。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Post-Processing SQL在为每个 FlowFile 处理记录之后,在当前数据库连接上执行的一条或多条以分号分隔的 SQL 语句。 可以通过在分号前加反斜杠,在 SQL 语句中包含字面分号。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Database Connection Pooling Service控制器服务 API:
DBCPService
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
用于获取与数据库的连接以发送记录的Controller Service。
Database Name指定语句应更新的数据库(或目录名称,取决于目标系统)。这可能不适用于您正在更新的数据库。在这种情况下,请将字段留空。请注意,如果设置了该属性且数据库区分大小写,则目录名称必须与数据库的目录名称完全匹配。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Schema Name指定表所属的 Schema 名称。这可能不适用于您正在更新的数据库。在这种情况下,请将字段留空。请注意,如果设置了该属性且数据库区分大小写,则 Schema 名称必须与数据库的 Schema 名称完全匹配。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Table Name该语句应影响的表的名称。 请注意,如果数据库区分大小写,则表名必须与数据库的表名完全匹配。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Binary String FormatUTF-8
  • UTF-8 — 二进制列的字符串值通过 UTF-8 字符编码以文本形式包含原始值
  • Hexadecimal — 二进制列的字符串值以十六进制格式包含原始值
  • Base64 — 二进制列的字符串值以 Base64 编码格式包含原始值
将字符串值解码为二进制时要应用的格式。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Translate Field Namestrue
  • true
  • false
如果为 true,处理器将尝试将字段名称转换为指定表中对应的列名称。如果为 false,则字段名称必须与列名称完全匹配,否则列将不会被更新。
Column Name Translation StrategyREMOVE_UNDERSCORE
  • Remove Underscore — 下划线 '_' 将从列名中移除。例如:'Pics_1_23' 变为 'PICS123'
  • Remove Space — 空格将从列名中移除。例如:'User Name' 变为 'USERNAME'
  • Remove Underscores and Spaces — 空格和下划线将从列名中移除。例如:'User_1 Name' 变为 'USER1NAME'
  • Remove Regular Expression Characters — 移除匹配正则表达式的字符。例如:'user-id' 变为 USERID,total(estimated) 变为 TOTALESTIMATED
  • Regular Expression — 从列名中移除匹配此正则表达式的字符。例如:1. '\d' 将移除所有数字 2. '[^a-zA-Z0-9_]' 将移除除下划线外的特殊字符
用于规范化表列名称的策略。列名称将被大写以进行大小写不敏感的匹配,与策略无关。
Column Name Translation Pattern列名将使用此正则表达式进行规范化
Unmatched Field BehaviorIgnore Unmatched Fields
  • 忽略不匹配的字段 — 文档中无法映射到数据库列的任何字段都将被忽略
  • 不匹配字段时失败 — 如果文档有任何无法映射到数据库列的字段,FlowFile 将被路由到失败关系
如果传入记录的字段未映射到数据库表的任何列,则此属性指定如何处理这种情况
Unmatched Column BehaviorFail on Unmatched Columns
  • 忽略不匹配的列 — 数据库中没有对应字段的任何列都将被视为非必需。不会记录通知
  • 不匹配列时警告 — 数据库中没有对应字段的任何列都将被视为非必需。将记录警告
  • 不匹配列时失败 — 如果数据库中有列在文档中没有对应字段,流程将失败。将记录错误
如果传入记录没有数据库表所有列的字段映射,则此属性指定如何处理这种情况
Update Keys唯一标识数据库中 UPDATE 语句行的列名的逗号分隔列表。如果语句类型为 UPDATE 且未设置此属性,则使用表的主键。在这种情况下,如果不存在主键,且未匹配列行为设置为 FAIL,则转换为 SQL 将失败。如果语句类型为 INSERT,则忽略此属性。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Delete Keys唯一标识数据库中 DELETE 语句行的列名的逗号分隔列表。如果语句类型为 DELETE 且未设置此属性,则使用表的列。如果语句类型不是 DELETE,则忽略此属性。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Field Containing SQL如果语句类型为'SQL'(在 statement.type 属性中设置),此字段指示 Record 中哪个字段包含要执行的 SQL 语句。该字段的值必须是单个 SQL 语句。如果语句类型不是'SQL',则忽略此字段。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Allow Multiple SQL Statementsfalse
  • true
  • false
如果语句类型为'SQL'(在 statement.type 属性中设置),此字段指示是否按分号拆分字段值并分别执行每条语句。如果任何语句导致错误,整个语句集将被回滚。如果语句类型不是'SQL',则忽略此字段。
Quote Column Identifiersfalse
  • true
  • false
启用此选项将导致所有列名被引用,从而允许您使用保留字作为表中的列名。
Quote Table Identifiersfalse
  • true
  • false
启用此选项将导致表名被引用,以支持在表名中使用特殊字符。
Max Wait Time0 seconds正在运行的 SQL 语句允许的最大时间,零表示没有限制。最大时间小于 1 秒将等于零。
支持表达式语言:是(仅使用环境/系统变量求值)
Rollback On Failurefalse
  • true
  • false
指定如何处理错误。 默认情况下(false),如果在处理 FlowFile 时发生错误,FlowFile 将根据错误类型路由到 'failure' 或 'retry' 关系,处理器可以继续处理下一个 FlowFile。 相反,您可能希望回滚当前处理的 FlowFile 并立即停止进一步处理。 在这种情况下,您可以通过启用此 'Rollback On Failure' 属性来实现。 如果启用,失败的 FlowFile 将保留在输入关系中而不受惩罚,并被重复处理 直到成功处理或通过其他方式移除。 设置适当的 'Yield Duration' 以避免过于频繁地重试很重要。
Table Schema Cache Size100指定应缓存多少个表模式
Maximum Batch Size1000指定每个批次发送到数据库的最大 SQL 语句数量。零表示批次大小不受限制,所有语句都放入单个批次中,对于大量语句可能导致高内存使用问题。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Database Session AutoCommitfalse
  • true
  • false
设置在使用的数据库连接上的自动提交模式。如果设置为 false,操作将根据成功或失败分别显式提交或回滚。如果设置为 true,驱动程序/数据库将自动处理提交/回滚。

关系 (Relationships)

名称描述自动终止
failure如果数据库无法更新且重试操作也将失败(例如无效查询或完整性约束违规),则 FlowFile 将被路由到此关系否
retry如果数据库无法更新,则 FlowFile 将路由到此关系,但再次尝试操作可能会成功否
success已成功从 SQL 查询结果集创建 FlowFile。否

读取的 FlowFile 属性

名称描述
statement.type如果为 Statement Type 属性选择了 'Use statement.type Attribute',则此属性的值将用于确定要生成和执行的语句类型(INSERT、UPDATE、DELETE、SQL 等)。

写入的 FlowFile 属性

名称描述
putdatabaserecord.error如果处理过程中发生错误,FlowFile 将路由到 failure 或 retry,此属性将被填充错误原因。

状态管理

该组件不存储状态。

受限 (Restricted)

该组件不受限。

输入要求

该组件要求有传入连接。