PutSQL Processor
描述
执行 SQL UPDATE 或 INSERT 命令。 传入 FlowFile 的内容预计是要执行的 SQL 命令。 SQL 命令可以使用 ? 转义参数。 在这种情况下,要使用的参数必须作为 FlowFile 属性存在,并具有命名约定 sql.args.N.type 和 sql.args.N.value,其中 N 是正整数。 sql.args.N.type 应该是一个指示 JDBC 类型的数字。 FlowFile 的内容预计为 UTF-8 格式。
标签
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| JDBC Connection Pool | | 控制器服务 API:DBCPServicecn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | 指定用于将 JSON 消息转换为 SQL 语句的 JDBC 连接池。连接池对于确定适当的数据库列类型是必需的。 |
| SQL Statement | | 要执行的 SQL 语句。语句可以为空、常量值,或使用表达式语言基于属性构建。如果指定了此属性,无论传入 FlowFile 的内容如何,都将使用该属性。如果此属性为空,则传入 FlowFile 的内容应包含有效的 SQL 语句,由处理器发送到数据库执行。 支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值) | |
| Support Fragmented Transactions | true |
| 如果为 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 |
| 要在使用的数据库连接上设置的自动提交模式。如果设置为 false,操作将被显式提交或回滚(分别基于成功或失败),如果设置为 true,则由驱动/数据库处理提交/回滚。 |
| Transaction Timeout | | 如果 <Support Fragmented Transactions> 属性设置为 true,指定在将所有具有该标识符的 FlowFile 转移到 'failure' 关系之前,等待特定 fragment.identifier 属性的所有 FlowFile 到达的时间。 | |
| Batch Size | 100 | 在单个事务中放入数据库的首选 FlowFile 数量 | |
| Obtain Generated Keys | false |
| 如果为 true,数据库自动生成的任何键都将使用 sql.generate.key 属性添加到生成它的 FlowFile 中。这可能导致性能略有下降,并且并非所有数据库都支持。 |
| Rollback On Failure | 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)
该组件不受限。
输入要求
该组件要求有传入连接。