PutSQL

文档中心 › 组件索引 › PutSQL

PutSQL Processor

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

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

描述

执行 SQL UPDATE 或 INSERT 命令。 传入 FlowFile 的内容预计是要执行的 SQL 命令。 SQL 命令可以使用 ? 转义参数。 在这种情况下,要使用的参数必须作为 FlowFile 属性存在,并具有命名约定 sql.args.N.type 和 sql.args.N.value,其中 N 是正整数。 sql.args.N.type 应该是一个指示 JDBC 类型的数字。 FlowFile 的内容预计为 UTF-8 格式。

标签

sqlputrdbmsdatabaseupdateinsertrelational

属性

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

名称默认值可选值描述
JDBC Connection Pool控制器服务 API:
DBCPService
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定用于将 JSON 消息转换为 SQL 语句的 JDBC 连接池。连接池对于确定适当的数据库列类型是必需的。
SQL Statement要执行的 SQL 语句。语句可以为空、常量值,或使用表达式语言基于属性构建。如果指定了此属性,无论传入 FlowFile 的内容如何,都将使用该属性。如果此属性为空,则传入 FlowFile 的内容应包含有效的 SQL 语句,由处理器发送到数据库执行。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Support Fragmented Transactionstrue
  • true
  • false
如果为 true,当此处理器消费 FlowFile 时,处理器将首先检查该 FlowFile 的 fragment.identifier 和 fragment.count 属性。如果 fragment.count 值大于 1,处理器将不会处理具有该 fragment.identifier 的任何 FlowFile,直到所有 FlowFile 都可用;届时,它将按照 FlowFile 的 fragment.index 属性指定的顺序,将具有该 fragment.identifier 的所有 FlowFile 作为单个事务处理。这提供了这些 SQL 语句的原子性。一旦此事务中的任何语句在执行时抛出异常,此事务将被回滚。当事务回滚发生时,这些 FlowFile 都不会被路由到 'success'。如果 <Rollback On Failure> 设置为 true,这些 FlowFile 将保留在输入关系中。当 <Rollback On Failure> 设置为 false 时,如果这些 FlowFile 中的任何一个将被路由到 'retry',则所有这些 FlowFile 都将被路由到 'retry'。否则,它们将被路由到 'failure'。如果此值为 false,这些属性将被忽略,更新将独立进行。
数据库会话自动提交false
  • true
  • false
要在使用的数据库连接上设置的自动提交模式。如果设置为 false,操作将被显式提交或回滚(分别基于成功或失败),如果设置为 true,则由驱动/数据库处理提交/回滚。
Transaction Timeout如果 <Support Fragmented Transactions> 属性设置为 true,指定在将所有具有该标识符的 FlowFile 转移到 'failure' 关系之前,等待特定 fragment.identifier 属性的所有 FlowFile 到达的时间。
Batch Size100在单个事务中放入数据库的首选 FlowFile 数量
Obtain Generated Keysfalse
  • true
  • false
如果为 true,数据库自动生成的任何键都将使用 sql.generate.key 属性添加到生成它的 FlowFile 中。这可能导致性能略有下降,并且并非所有数据库都支持。
Rollback On Failurefalse
  • true
  • false
指定如何处理错误。 默认情况下(false),如果在处理 FlowFile 时发生错误,FlowFile 将根据错误类型路由到 'failure' 或 'retry' 关系,处理器可以继续处理下一个 FlowFile。 相反,您可能希望回滚当前处理的 FlowFile 并立即停止进一步处理。 在这种情况下,您可以通过启用此 'Rollback On Failure' 属性来实现。 如果启用,失败的 FlowFile 将保留在输入关系中而不受惩罚,并被重复处理 直到成功处理或通过其他方式移除。 设置适当的 'Yield Duration' 以避免过于频繁地重试很重要。

关系 (Relationships)

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

读取的 FlowFile 属性

名称描述
fragment.identifier如果 <Support Fragment Transactions> 属性为 true,则此属性用于确定两个 FlowFile 是否属于同一事务。
fragment.count如果 <Support Fragment Transactions> 属性为 true,则此属性用于确定完成事务需要多少 FlowFile。
fragment.index如果 <Support Fragment Transactions> 属性为 true,则此属性用于确定事务中 FlowFile 的评估顺序。
sql.args.N.type传入的 FlowFile 应为参数化 SQL 语句。每个参数的类型指定为表示参数 JDBC 类型的整数。
sql.args.N.value传入的 FlowFile 应为参数化 SQL 语句。参数的值指定为 sql.args.1.value、sql.args.2.value、sql.args.3.value 等。sql.args.1.value 参数的类型由 sql.args.1.type 属性指定。
sql.args.N.format此属性始终是可选的,但默认选项可能并不总是适用于您的数据。传入的 FlowFile 应为参数化 SQL 语句。在某些情况下需要指定格式选项,目前这仅适用于二进制数据类型、日期、时间和时间戳。二进制数据类型(默认为 'ascii')- ascii:属性值中的每个字符串字符代表单个字节,这是 Avro 处理器提供的格式。base64:字符串是可以解码为字节的 Base64 编码字符串。hex:字符串是十六进制编码的,所有字母大写且开头没有 '0x'。日期/时间/时间戳 - 日期、时间和时间戳格式都支持自定义格式或命名格式('yyyy-MM-dd'、'ISO_OFFSET_DATE_TIME'),如 java.time.format.DateTimeFormatter 所指定。如果未指定,则 long 值输入预期为 unix 纪元(从 1970/1/1 起的毫秒数),或 Date 的 'yyyy-MM-dd' 格式字符串、Time 的 'HH:mm:ss.SSS' 格式(某些数据库引擎如 Derby 或 MySQL 不支持毫秒并将截断毫秒)、Timestamp 使用 'yyyy-MM-dd HH:mm:ss.SSS' 格式。

写入的 FlowFile 属性

名称描述
sql.generated.key如果数据库为 INSERT 语句生成了键且'获取生成的键'属性设置为 true,将添加此属性以指示生成的键(如果可能)。此功能并非所有数据库供应商都支持。

状态管理

该组件不存储状态。

受限 (Restricted)

该组件不受限。

输入要求

该组件要求有传入连接。