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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 树莓派4B +远程SSH+远程桌面[通俗易懂]

    树莓派4B +远程SSH+远程桌面[通俗易懂]一、有线SSH连接树莓派我的实验环境是笔记本电脑+树莓派4B具体步骤为:1、电脑连接上无线网络,将电脑网线连接树莓派2、打开如下界面3、双击WLAN——>>点击属性——>>再点击共享选择以太网4、双击以太网——>>点击属性——>>IPV4——>>在选择下面的…

    2022年5月15日
    102
  • android线程间通信的几种方法_Android线程间通信机制

    android线程间通信的几种方法_Android线程间通信机制讲解Handler机制的博文很多,我也看了很多,但说实话,在我对Handler几乎不怎么了解的情况下,每一篇文章我都没太看懂,看完之后脑子里还是充满了疑问。究其原因,是因为几乎每一篇文章一上来就开始深入Handler源码,使得在一些宏观的问题上还是充满疑问,如果你从来没接触过Handler,对一些基础的问题还充满疑问,那深入源码去探究根源肯定会有些吃力。下面,我就从一个初学者思考的角度,来讲一讲H…

    2022年10月7日
    0
  • 简单的TCP客户端发包工具[通俗易懂]

    简单的TCP客户端发包工具[通俗易懂]一、TCP介绍先放这里有时间在写,最近在写DuiLib相关的使用内容,这部分大家凑活着看二、程序截图下载链接链接:https://pan.baidu.com/s/1MzNUzwd7WwBat6vNMcu6Ow密码:ibuv 主要源码://.h//TCPClient.cpp:定义应用程序的类行为。//#include"stdafx.h"#in…

    2022年9月6日
    3
  • .dll反编译(反编译什么意思)

    需求:有些Dll文件我们找不到源码,只有编译后的dll,但是我们想要改某个字段或者连接字符串,并不需要动太多业务逻辑的情况下,我们可以这样干。1.打开微软提供的反编译工具ildasm.exe这个工具是windows自带的反编译工具。路径:C:\ProgramFiles(x86)\MicrosoftSDKs\Windows\v10.0A\bin\NETFX4.6.2Tools可以根据需要,选择对应工具版本。一般随便选一个版本都是可以的了。比如,我选择的是4.6…

    2022年4月12日
    55
  • 可视化篇:效果图_可视化建模

    可视化篇:效果图_可视化建模写在最前在做可视化的时候,理解自己做的每个图形展示的意义,是多么的至关重要每做一张图的时候,我都在想,该如何阐述图形背后的故事下面是一些效果图,每张图,都只为更好地反应数据背后的那段故事。由于图片最大只能2M,所以调小后有的看起来不是很舒服,多多见谅所使用的工具主要是:R语言,Echart,D3.js如何实现在别的文章有详细说明。2016年的广州春运广州南站载客

    2022年8月31日
    1
  • SFM综述

    SFM综述https://blog.csdn.net/qq_29462849/article/details/118159269

    2022年6月20日
    58

发表回复

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

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