ExecuteSQL

版权声明:by zhangchengk https://blog.csdn.net/weixin_36048246/article/details/87359310

简单说,就是执行SQL语句,返回avro格式数据。(可以使用配置中的SQL,也可以使用流中传过来的SQL 比如GenerateTableFetch,ConvertJsonToSql等等生成的SQL,执行类似于insert into。。。value  (?。。。),这个?的值是在流属性中的:sql.args.N.value  sql.args.N.type 具体的可以看官方文档)

配置:

Database Connection Pooling ServiceHiveConnectionPoolDBCPConnectionPoolDBCPConnectionPoolLookup

SQL select query:要执行的SQL,设置了此属性,则使用此SQL(不用流中的SQL);不设置,则使用流中的SQL;

Max Wait Time;

Normalize Table/Column Names:是否将表名,列名中可能存在的avro格式不兼容的字符进行转换(例如逗号冒号转换为下划线,一般表名列名也不存在这些字符,就不用设置了,默认false)

Use Avro Logical Types:因为数据库字段类型与avro的字段类型并不是直接对等的,这个属性设置为false时,十进制/数字、日期、时间和时间戳列就写成字符串,设为true,就转为对应的avro逻辑类型;这方面的具体知识也比较长,需要了解的可以自行查一查。实操过程中我使用过true,后来还是干脆使用字符串了。(如下)

最后写入目标数据库数据类型也成功写入进去了。

Compression Format:压缩,看情况,这个一直也是使用默认的设置;

Default Decimal Precision:精度;当一个十进制/数字值被写成“DECIMAL”Avro逻辑类型时,需要一个特定的“precision”来表示可用数字的数量。通常,精度由列数据类型定义或数据库引擎默认定义。然而,某些数据库引擎可以返回未定义的精度(0)。

Default Decimal Scale:当一个小数/数字值被写成“DECIMAL”Avro逻辑类型时,需要一个特定的“scale”来表示可用的小数位数。通常,scale是由列数据类型定义或数据库引擎默认定义的。但是,当返回未定义的精度(0)时,一些数据库引擎的伸缩性也可能不确定。“默认十进制”用于编写那些未定义的数字。如果一个值的小数比指定的比例多,那么该值将被四舍五入,例如,1.53在比例为0时变成2,在比例为1时变成1.5。

Max Rows Per Flow File:单个流文件中包含的最大结果行数。这将允许将非常大的结果集分解为多个流文件。如果指定的值为零,则在单个流文件中返回所有行。

Output Batch Size:看文档会有些绕,我是这么理解的,比如设置5,输出流累计到5就输出到下一队列;设置0 ,得到一个结果输出一个结果;我理解这个属性是与Max Rows Per Flow File一起使用的,可以避免一个特别大的流的处理;

猜你喜欢

转载自blog.csdn.net/weixin_36048246/article/details/87359310