ExecuteSQL

ExecuteSQL描述:该处理器执行SQL语句,返回avro格式数据。处理器使用流式处理,因此支持任意大的结果集。处理器可以使用标准调度方法将此处理器调度为在计时器或cron表达式上运行,也可以由传入的流文件触发。SQL语句来源可以来自该处理器属性SQLselectquery,也可以来自上一个处理器的输出流(UTF-8格式)(GenerateTableFetch,ConvertJsonToSq…

大家好,又见面了,我是你们的朋友全栈君。

描述:

       该处理器执行SQL语句,返回avro格式数据。处理器使用流式处理,因此支持任意大的结果集。处理器可以使用标准调度方法将此处理器调度为在计时器或cron表达式上运行,也可以由传入的流文件触发。SQL语句来源可以来自该处理器属性SQL select query,也可以来自上一个处理器的输出流(UTF-8格式)(GenerateTableFetch,ConvertJsonToSql等等生成的流内容中的SQL语句,类似于insert into。。。value  (?。。。),这个?的值是存在于流属性中的:sql.args.N.value  sql.args.N.type ,ExecuteSQL会自动装配并执行)

属性:

属性名称 默认值 可选值 描述
Database Connection Pooling Service                                       

Controller Service API: 
DBCPService
Implementations: 

DBCPConnectionPoolLookup
HiveConnectionPool
DBCPConnectionPool

数据库连接池
SQL select query     要执行的SQL,设置了此属性,则使用此SQL(不用流中的SQL);不设置,则使用流中的SQL;
支持表达式语言
Max Wait Time 0 seconds   执行SQL的最大等待时间,小于1秒则系统默认此配置等于0秒,0秒即没有限制的意思,无限等待
Normalize Table/Column Names false
  • true
  • false
是否将表名,列名中可能存在的avro格式不兼容的字符进行转换(例如逗号冒号转换为下划线,当然一般表名列名也不存在这些字符,应用较少,默认false)
Use Avro Logical Types false
  • true
  • false
是否对DECIMAL/NUMBER, DATE, TIME 和TIMESTAMP类型使用Avro Logical Types。如果选择false,这些列则转成字符串形式。如果选择true,Avro Logical Types则作为其基本类型,具体来说,DECIMAL/NUMBER转换成logical ‘decimal’:写成带有精度的字节,DATE转换为逻辑logical“date-millis”:值写成天数(从纪元(1970-01-01)算起的整数),TIME转换为logical“time-millis”:值写成毫秒数(从纪元(1970-01-01)算起的整数),TIMESTAMP转换为logical“timestamp-millis”:值写成毫秒数(从纪元(1970-01-01)算起的整数)。如果Avro记录的reader也知道这些Logical Types,那么就可以根据reader的实现类结合上下文反序列化这些值。
Compression Format NONE
  • BZIP2
  • DEFLATE
  • NONE
  • SNAPPY
  • LZO
压缩类型,默认值NONE
Default Decimal Precision 10   精度;当一个DECIMAL/NUMBER类型的值被写成“DECIMAL”Avro Logical 类型时,需要一个特定的“precision”来表示可用具体数字的数量。通常,精度由列数据类型定义或数据库引擎默认定义。当然,某些数据库引擎也可以返回未定义的精度(0)。
支持表达式语言
Default Decimal Scale 0   当一个DECIMAL/NUMBER类型被写成“DECIMAL”Avro Logical 类型时,需要一个特定的“scale”来表示可用的小数位数。通常,scale是由列数据类型定义或数据库引擎默认定义的。但是,当返回未定义的精度(0)时,一些数据库引擎的伸缩性也可能不确定。“默认十进制”用于编写那些未定义的数字。如果一个值的小数比指定的比例多,那么该值将被四舍五入,例如,1.53在比例为0时变成2,在比例为1时变成1.5。
支持表达式语言
Max Rows Per Flow File 0   单个流文件中包含的最大结果行数。这意味着允许将非常大的结果集分解为多个流文件。如果指定的值为零,则在单个流文件中返回所有行。
支持表达式语言
Output Batch Size 0   提交进程会话之前要排队的输出流文件的数量。当设置为零时,会话将在处理完所有结果集行并准备好将输出流文件传输到下游关系时提交。对于大型结果集,这可能导致在处理器执行结束时传输大量流文件。如果设置了此属性,那么当指定数量的流文件准备好传输时,将提交会话,从而将流文件释放到下游关系。注意:片段。在设置此属性时,不会在FlowFiles上设置count属性。
支持表达式语言

        

举例说明:

1:Avro Logical Types ,没有接触过的人可能会一头雾水。简单来说,数据库有自己的数据类型,avro格式数据也有自己的数据类型,两方的数据类型有些是能直接映射的,有些是需要转换的,文档中所说的DECIMAL/NUMBER, DATE, TIME 和TIMESTAMP这些来源数据的类型在avro中就无法直接映射类型;这里提供了两种解决方法,第一种是上述类型统一转成字符串类型,具体值不变;另一种是转换成avro Logical Types,但数据值会变动转换。按我使用一般这个属性设置为false,十进制/数字、日期、时间和时间戳列就写成字符串。最大的好处就是值不变(如下)ExecuteSQL

然后可以使用ConvertJsonToSql(从目标表获取元数据信息)或者写临时表,外部表等等,最后也会有很多方法成功写入到目标库。ExecuteSQL

2:SQL select query

首先设计如图一个流程:

ExecuteSQL

流中是一个SQL语句  limit 1

ExecuteSQL

SQL select query 属性设成 limit 2

ExecuteSQL

结果发现,当SQL select query配置后,将忽略流中传过来的SQL

ExecuteSQL

 

3:

Max Rows Per Flow File   Output Batch Size

这两个看起来都是控制输出大小的,文档看的有点迷糊;

咱们一个一个来看:

3.1 首先查一百条数据,Max Rows Per Flow File 设为10

ExecuteSQL

结果是输出10个流文件,每个流文件10条数据

ExecuteSQL

 

ExecuteSQL

3.2

ExecuteSQL

ExecuteSQLExecuteSQL

结果感觉跟没设置一样,及时设成成 limit 一百万 一个亿,也是输出一个流文件;当然了,这会儿一般大家都会骂娘“这NIFI太坑了!都没用!垃圾。。。”

别急,看下代码就明白什么意思了(如下图)看注释已经此处的代码逻辑,当流文件数达到了outputBatchSize的时候,这批流文件会被输出到sucess

ExecuteSQL

比如配置如下,会发现流文件输出不再是一个一个的输出,而是2个为单位的输出:

ExecuteSQL

不信你可以试试,output Batch size设成偶数,流增长都是偶数

ExecuteSQL

同理,设为奇数,就会发现是按奇数增长的

ExecuteSQL

ExecuteSQL

公众号

关注公众号 得到第一手文章/文档更新推送。

ExecuteSQL

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143141.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用BeanUtils.copyProperties进行对象之间的属性赋值「建议收藏」

    使用BeanUtils.copyProperties进行对象之间的属性赋值「建议收藏」1、使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get、set方法一个一个属性的赋值/***对象属性拷贝<br>*将源对象的属性拷贝到目标对象**@paramsource源对象*@paramtarget目标对…

    2022年10月4日
    0
  • 比特每秒bps,2Mbps=256kbit下载速度转换算法。

    比特每秒bps,2Mbps=256kbit下载速度转换算法。

    2021年8月19日
    74
  • LTE-FDD和TDD帧结构「建议收藏」

    LTE-FDD和TDD帧结构「建议收藏」1.两种双工模式LTE支持两种双工模式:TDD和FDD,于是LTE定义了两种帧结构:TDD帧结构和FDD帧结构。LTE标准制定之初就充分考虑了TDD和FDD双工方式在实现中的异同,增大两者共同点、减少两者差异点。两种帧结构设计的差别,会导致系统实现方面的不同,但主要的不同集中在物理层(PHY)的实现上,而在媒介接入控制层(MAC)、无线链路控制(RLC)层的差别不大,在更高层的设计上几乎没…

    2022年6月10日
    113
  • Android源码学习之六——ActivityManager框架解析

    Android源码学习之六——ActivityManager框架解析本文从静态类结构和动态类结构两个角度分析了ActivityManager的框架,兼顾了Binder机制和代理模式在进程间通信的机理,对帮助开发人员深化操作系统的结构和框架具有一定的指导作用。

    2022年6月6日
    33
  • 深入浅出JVM调优,看完你就懂

    深入浅出JVM调优,看完你就懂深入浅出JVM调优基本概念:JVM把内存区分为堆区(heap)、栈区(stack)和方法区(method)。由于本文主要讲解JVM调优,因此我们可以简单的理解为,JVM中的堆区中存放的是实际的对象,是需要被GC的。其他的都无需GC。下图文JVM的内存模型从图中我们可以看到,1、JVM实质上分为三大块,年轻代(YoungGen),年老代(OldMemory…

    2022年6月1日
    29
  • TinyXML2 入门教程

    TinyXML2 入门教程TinyXML2是simple、small、efficient开源的C++XML文件解析库,可以很方便的应用到现有的项目之中。非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作。TinyXML2详细介绍与源码获取方法详见:TinyXML2官网。

    2022年4月26日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号