Skip to main content

ConvertJSONToSQL

描述:

将JSON格式的数据流转换为UPDATE,INSERT或DELETE的SQL语句。 输入数据流的JSON格式应该是“平坦的”,这意味着它由一个JSON元素组成,每个字段映射到一个简单类型。 如果字段映射到JSON对象,则该JSON对象将被解释为Text。 如果输入是JSON元素的数组,则数组中的每个元素都作为单独的数据流输出到'sql'连线。 转换成功后,原始数据流将路由到“original”连线,SQL将路由到“sql”连线。

标签:

json, sql, database, rdbms, insert, update, delete, relational, flat

参数:

如下列表中,必填参数则标识为加粗. 其他未加粗参数,则表示为可选参数。表中同时提到参数默认值设置, 并且 参数还支持 表达式语言.

名字默认值允许值列表描述
数据库连接池控制器服务API:
DBCPService
实现:
DBCPConnectionPoolLookup
DBCPConnectionPool
指定要将JSON消息转换为SQL语句的JDBC连接池。 必须使用连接池才能确定合适的数据库列类型。
SQL语句类型
- UPDATE
- INSERT
- DELETE
指定要生成的SQL语句的类型
表名将要用于更新的表名

支持表达式语言 (支持流属性和变量)
Catalog语句应更新的Catalog的名称。 如果不适用于要更新的数据库,在这种情况下,请将该字段留空

支持表达式语言 (支持流属性和变量)
Schema表所属的schema的名称。 这可能不适用于要更新的数据库,在这种情况下,请将该字段留空

支持表达式语言 (支持流属性和变量)
转换字段名true
- true
- false
如果为true,则组件将尝试将JSON字段名称转换大写并删除下划线后来映射匹配数据库的字段。 如果为false,则JSON字段名称必须与列名称完全匹配,否则不会更新列
字段不匹配处理忽略
- 忽略JSON文件中无法映射到数据库中的列的任何字段都将被忽略
- 失败如果JSON文件中无法映射到数据库中的列的字段,则数据流将路由到失败连线
如果传入的JSON元素有不能映射到数据库表中的字段,则此属性决定如何处理该情况
列不匹配处理失败
- 忽略任何列中没有JSON匹配的字段将被假定为不需要,并且不会记录任何日志
- 警告任何列中没有JSON匹配的字段将被假定为不需要,但会记录警告到日志
- 失败任何列中没有JSON匹配的字段将被输出到失败数据流中,并且会记录错误到日志
如果传入的JSON元素没有数据库表的列的字段映射,则此属性指定如何处理该情况
更新键以逗号分隔的列名列表,用于唯一标识数据库中UPDATE语句的行。 如果语句类型为UPDATE且未设置此属性,则使用表的主键。 在这种情况下,如果不存在主键,且“列不匹配处理”设置为“FAIL”,则转换SQL将失败。 如果语句类型为INSERT,则忽略此属性

支持表达式语言 (支持流属性和变量)
转定义列名不转义
- 转义
- 不转义
启用此选项将导致转定义所有列名称,并允许在表中使用保留字作为列名。
转定义表名不转义
- 转义
- 不转义
启用此选项可使表名得以支持在表名中使用特殊字符
SQL参数的属性前缀sql要添加到输出数据流的属性前缀,例如<sql> .args.1.value,其中<sql>将替换为指定的值

支持表达式语言 (支持流属性和变量)

连线:

名字描述
sql当输入数据流的内容成功转换为SQL语句后,数据流将输出到此连线。
failure如果无法将数据流转换为SQL语句,则会将数据流输出到此连线。 常见原因包括无效的JSON内容或缺少必填字段的JSON内容(如果使用INSERT语句类型)。
original将数据流转换为SQL后,原始JSON数据流将输出到此连线。

读取属性:

未提供。

写入属性:

名字描述
mime.type将输出到'sql'数据流的mime.type设置为'text/plain'。
<sql>.tableSets the <sql>.table attribute of FlowFile that is routed to 'sql' to the name of the table that is updated by the SQL statement. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.
<sql>.catalogIf the Catalog name is set for this database, specifies the name of the catalog that the SQL statement will update. If no catalog is used, this attribute will not be added. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.
fragment.identifier对于相同的输入数据流,所有数据流都输出到'sql'连线(如果输入的数据流是JSON数组,则为同一输入数据流将输出多个)并将具有与fragment.identifier属性相同的值。 然后可以使用它来关联结果。
fragment.count为相同的输入数据流生成的SQL数据流的数量。 这可以与fragment.identifier属性一起使用,以便知道有多少输出数据流来源于同一个输入数据流。
fragment.index此数据流在输出数据流列表中的索引,这些数据流都是从相同的输入数据流派生出来的。 这可以与fragment.identifier和fragment.count属性结合使用,以了解哪些数据流源自相同的输入数据流以及SQL数据流的生成顺序
<sql>.args.N.typeThe output SQL statements are parametrized in order to avoid SQL Injection Attacks. The types of the Parameters to use are stored in attributes named <sql>.args.1.type, <sql>.args.2.type, <sql>.args.3.type, and so on. The type is a number representing a JDBC Type constant. Generally, this is useful only for software to read and interpret but is added so that a processor such as PutSQL can understand how to interpret the values. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.
<sql>.args.N.valueThe output SQL statements are parametrized in order to avoid SQL Injection Attacks. The values of the Parameters to use are stored in the attributes named sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. Each of these attributes has a corresponding <sql>.args.N.type attribute that indicates how the value should be interpreted when inserting it into the database.The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.

状态管理:

该组件不保存状态。

限制:

该组件没有限制

输入流要求:

组件必须提供输入流。

系统资源考量:

未提供。

参考:

PutSQL