【Apache NIFI Processor】ExecuteSQL

【Apache NIFI Processor】ExecuteSQL

Description 描述

​ 该处理器执行SQL语句,返回avro格式数据。处理器使用流式处理,因此支持任意大的结果集。处理器可以使用标准调度方法将此处理器调度为在计时器或cron表达式上运行,也可以由传入的流文件触发。SQL语句来源可以来自该处理器属性SQL select query,也可以来自上一个处理器的输出流(FlowFile的内容应采用UTF-8格式)(GenerateTableFetch,ConvertJsonToSql等等生成的流内容中的SQL语句,类似于insert into。。。value (?。。。),这个?的值是存在于流属性中的,命名约定为sql.args.N.value sql.args.N.type ,其中N是一个正整数。 sql.args.N.type应该是指示JDBC类型的数字。FlowFile属性’executesql.row.count’指示选择了多少行。)

配置

设置(Settings)

在这里插入图片描述

Name:处理器名称,默认处理器的名称与处理器类名相同。旁边是一个复选框,指示处理器是否已启用,禁用状态用于指示当启动一组处理器时,例如当DFM启动整个进程组时,应排除此(disabled)处理器。

Id & Type & Bundle:Processor的唯一标识符 & Processor的类名 & Processor所在NAR包。这些值无法修改。

Penalty Duration:在处理一条数据(FlowFile)的正常过程中,可能发生事件,该事件指示处理器此时不能处理数据但是数据可以在稍后进行处理。在发生这种情况时,处理器可以选择Penalize FlowFile。这将阻止FlowFile在一段时间内被处理。例如,如果处理器要将数据推送到远程服务,但远程服务已经有一个与处理器指定的文件名同名的文件,则处理器可能会惩罚FlowFile。Penalty Duration允许DFM指定FlowFile应该受到多长时间的惩罚。默认值为30 seconds。(简单理解为推后一段时间再处理)

Yield Duration:处理器可以确定存在某种情况,处理器没法进行处理数据。例如,如果处理器要将数据推送到远程服务并且该服务没有响应。这样的话处理器应该Yield,这将阻止处理器运行一段时间。通过设置Yield Duration来指定该时间段。默认值为1 second。

Bulletin Level:每当处理器写日志时,处理器将生成公告。此设置指示应在用户界面中显示的最低级别的公告。默认情况下,公告级别设置为WARN,这意味着它将显示所有警告和错误级别公告。

Automatically Terminate Relationships:此处列出了处理器定义的每个关系及其描述。为了使处理器被视为有效且能够运行,处理器定义的每个关系必须连接到下游组件或自动终止。如果关系是自动终止的,则将从流中删除任何路由到该关系的FlowFile,并视其为处理完成。已连接到下游组件的任何关系都无法自动终止。必须首先从使用它的所有Connection中删除关系。此外,对于选择自动终止的关系,如果将关系添加到连接,则自动终止状态将被清除(turned off)。

调度(Scheduling)

在这里插入图片描述

Scheduling Strategy

调度策略有三种可能的选项:

Timer driven:这是默认模式。处理器将定期运行。运行处理器的时间间隔由Run Schedule选项定义(见下文)。

Event driven:选择此模式时,将由一个事件触发处理器运行,当FlowFiles进入连接此处理器的Connections时,将产生这个事件。此模式目前被认为是实验性的,并非所有处理器都支持。选择此模式时,Run Schedule选项不可配置。此外,只有此模式下Concurrent Tasks选项可以设置为0。这种情况,线程数仅受管理员配置的事件驱动线程池的大小限制

CRON驱动:当使用CRON驱动的调度模式时,处理器将定期运行,类似于定时器驱动的调度模式。CRON驱动模式提供了更大的灵活性。CRON驱动的调度值是由六个必需字段和一个可选字段的字符串组成,每个字段由空格分隔。这些字段是:

FieldValid values
Seconds0-59
Minutes0-59
Hours0-23
Day of Month1-31
Month1-12 or JAN-DEC
Day of Week1-7 or SUN-SAT
Year (optional)empty, 1970-2099

您通常通过以下方式来指定值:

  • 数字:指定一个或多个有效值。您可以使用逗号分隔列表输入多个值。
  • 范围:使用 number-number语法指定范围。
  • 增量:使用 start value/increment语法指定增量。例如,在"分钟"字段中,0/15表示分钟0,15,30和45。

您还应该知道几个有效的特殊字符:

  • * 表示所有值对该字段都有效。
  • ? 表示未指定特定值。此特殊字符在"Day of Month"和"Day of Week"字段中有效。
  • L 您可以将L附加到星期值之一,以指定该月中该日的最后一次出现。例如,1L表示该月的最后一个星期日。

例如:

  • 该字符串0 0 13 * * ?表示您希望将处理器安排在每天下午1:00运行。
  • 该字符串0 20 14 ? * MON-FRI表示您希望将处理器安排在每周一至周五下午2:20运行。
  • 该字符串0 15 10 ? * 6L 2011-2017表示您希望将处理器安排在2011年至2017年的每个月的最后一个星期五上午10:15运行。

有关其他信息和示例,请参阅Quartz文档中的ChronTrigger教程。

Run Schedule

"Run Schedule"指示处理器运行的频率。此字段的有效值取决于所选的调度策略(参见上文)。如果使用事件驱动的调度策略,则此字段不可用。使用定时器驱动的调度策略时,该值是由数字后跟时间单位指定的持续时间。例如,1 second或5 mins。默认值0 sec表示处理器应尽可能频繁地运行,只要它有要处理的数据即可。有关适用于CRON驱动的调度策略的值的说明,请参阅CRON驱动的调度策略本身的说明。

Concurrent Tasks

​ 控制处理器将使用的线程数。换句话说,它控制此处理器应同时处理多少个FlowFiles。增加此值通常会使处理器在相同的时间内处理更多数据。但是,它是通过使用其他处理器无法使用的系统资源来实现此目的。这基本上提供了处理器的相对权重 - 应该将多少系统资源分配给此处理器而不是其他处理器。该字段适用于大多数处理器。但是,某些类型的处理器只能使用单个任务进行调度。

Execution

执行设置用于确定处理器将被调度执行的节点。选择"All Nodes"将导致在集群中的每个节点上调度此处理器。选择"Primary Node"将导致此处理器仅在主节点上进行调度。

属性(Properties)

​ Properties选项卡提供了一种特定于Processor的行为机制的配置。每种类型的处理器必须定义哪些属性对其用例有意义。

在这里插入图片描述

属性名称默认值可选值描述
Database Connection Pooling ServiceController Service API: DBCPService Implementations: DBCPConnectionPoolLookup HiveConnectionPool DBCPConnectionPool数据库连接池
SQL select query要执行的SQL,设置了此属性,则使用此SQL(不用流中的SQL);不设置,则使用流中的SQL; 支持表达式语言
Column Convert StrategytoUpperCase
Max Wait Time0 seconds执行SQL的最大等待时间,小于1秒则系统默认此配置等于0秒,0秒即没有限制的意思,无限等待
Normalize Table/Column Namesfalse▪ true ▪ false是否将表名,列名中可能存在的avro格式不兼容的字符进行转换(例如逗号冒号转换为下划线,当然一般表名列名也不存在这些字符,应用较少,默认false)
Use Avro Logical Typesfalse▪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 FormatNONE▪ BZIP2 ▪ DEFLATE ▪ NONE ▪ SNAPPY ▪ LZO压缩类型,默认值NONE
Default Decimal Precision10精度;当一个DECIMAL/NUMBER类型的值被写成“DECIMAL”Avro Logical 类型时,需要一个特定的“precision”来表示可用具体数字的数量。通常,精度由列数据类型定义或数据库引擎默认定义。当然,某些数据库引擎也可以返回未定义的精度(0)。 支持表达式语言
Default Decimal Scale0当一个DECIMAL/NUMBER类型被写成“DECIMAL”Avro Logical 类型时,需要一个特定的“scale”来表示可用的小数位数。通常,scale是由列数据类型定义或数据库引擎默认定义的。但是,当返回未定义的精度(0)时,一些数据库引擎的伸缩性也可能不确定。“默认十进制”用于编写那些未定义的数字。如果一个值的小数比指定的比例多,那么该值将被四舍五入,例如,1.53在比例为0时变成2,在比例为1时变成1.5。 支持表达式语言
Max Rows Per Flow File0单个流文件中包含的最大结果行数。这意味着允许将非常大的结果集分解为多个流文件。如果指定的值为零,则在单个流文件中返回所有行。 支持表达式语言
Output Batch Size0提交进程会话之前要排队的输出流文件的数量。当设置为零时,会话将在处理完所有结果集行并准备好将输出流文件传输到下游关系时提交。对于大型结果集,这可能导致在处理器执行结束时传输大量流文件。如果设置了此属性,那么当指定数量的流文件准备好传输时,将提交会话,从而将流文件释放到下游关系。注意:片段。在设置此属性时,不会在FlowFiles上设置count属性。 支持表达式语言

注:

Max Rows Per Flow File

首先查一百条数据,Max Rows Per Flow File 设为10,结果是输出50个流文件,每个流文件10条数据。

在这里插入图片描述

Output Batch Size

看注释已经此处的代码逻辑,当流文件数达到了outputBatchSize的时候,这批流文件会被输出到sucess:

在这里插入图片描述

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

在这里插入图片描述

示例说明

TODO:待更新。

参考:

https://nifichina.github.io/processors/ExecuteSQL.html#%E5%B1%9E%E6%80%A7

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值