Query Guide-Query From Insert
  ha7vY1zXUFvq 2023年11月02日 31 0

Query查询

Query定义了Siddhi中的处理逻辑。它使用来自一个或多个流、命名窗口、表和/或命名聚合的事件,以流方式处理事件,并将输出事件生成到流、命名窗或表中。

目的

查询提供了一种方法,可以按照事件到达的顺序处理事件,并使用有状态和无状态的复杂事件处理和流处理操作生成输出。

语法

Query Guide-Query From Insert_流处理

参数

说明

<query name>

查询名称

<input>

来源流、命名窗口、表和/或命名聚合定义事件

<projection>

使用selectfunctionaggregation functiongroup-by操作生成输出事件属性,并在发送之前使用havelimit&offsetorder-byoutput rate limiting操作过滤生成的输出。这里的<projection>是可选的,当它被省略时,所有输入事件都将按原样发送到输出。

<output action>

输入到流、命名窗口或表

From

所有Siddhi查询必须始终至少有一个流或命名窗口作为输入(某些查询可以使用多个流或指定窗口),只有联接查询可以通过表或命名聚合使用事件作为第二个输入。在查询中使用输入流、命名窗口、表和/或命名聚合之前,应先定义它们。

语法

Query Guide-Query From Insert_聚合函数_02

这里的<handler>表示使用过滤器、窗口和流函数的处理逻辑,join表示联接,->表示模式,和,表示序列。

Insert

允许将事件直接插入流、命名窗口或表中。

Query Guide-Query From Insert_聚合函数_03

Value

Select

Function 函数

函数是预先配置的操作,可以消耗零个或多个参数,并始终产生一个值作为结果。它可以在任何可以使用属性的地方使用。

目的

它封装了预先配置的可重用执行逻辑,允许用户只需调用函数就可以在任何地方执行逻辑。这也使得编写SiddhiApp变得简单易懂。

语法

Query Guide-Query From Insert_流处理_04

<namespace>和<function name>一起唯一地标识函数。<function name>用于指定函数提供的操作,<namespace>用于标识函数所在的扩展。内置函数不属于命名空间,因此在定义时会省略<namespace>。<parameter>定义函数接受的输入参数。

以下是一些内置的Siddhi函数。

内置函数

说明

eventTimestamp

返回事件的时间戳

currentTimeMillis

返回SiddhiApp运行时的当前时间

default

如果参数为null,则返回默认值

ifThenElse

返回基于条件参数的参数

UUID

生成UUID

cast

转换参数类型

convert

转换参数类型

coalesce

返回第一个非null的输入参数

maximum

返回所有参数的最大值

minimum

返回所有参数的最小值。

instanceOfBoolean

检查参数是否为布尔值的实例

instanceOfDouble

检查参数是否为Double的实例

instanceOfFloat

检查参数是否为Float的实例

instanceOfInteger

检查参数是否为Integer的实例

instanceOfLong

检查参数是否为Long的实例

instanceOfString

检查参数是否为String的实例

createSet

使用给定的输入参数创建哈希集

sizeOfSet

返回作为参数传递的HashSet中的项数

例子

名为ifThenElse的函数接受三个输入参数,第一个参数是布尔条件price>700,第二个和第三个参数是if case“high”和else case“low”的输出。

Query Guide-Query From Insert_流处理_05

Filter 过滤

目的

有助于选择与处理相关的事件,并忽略与处理无关的事件

语法

Query Guide-Query From Insert_批处理_06

例子

Query Guide-Query From Insert_流处理_07

Stream Function流函数

流函数处理通过输入流(或命名窗口)到达的事件,以生成零个或多个新事件,每个事件具有一个或更多个附加输出属性。与标准函数不同,它们直接在流或(或命名窗口)上操作,并可以通过生成事件的预定义属性添加函数输出。

目的

当一个函数为给定的输入参数产生多个输出时,流函数很有用。在这种情况下,输出被添加到事件中,使用具有预定义属性名称的新引入的属性。

语法

Query Guide-Query From Insert_流处理_08

内置流函数

内置流函数

描述

pol2Cart

该函数用于把极坐标(柱坐标)转换为笛卡尔坐标(指平面直角坐标或空间直角坐标)

例子

Query Guide-Query From Insert_批处理_09

Window 窗口

Windows从输入流中捕获事件的子集,并根据指定的标准将其保留一段时间。该标准定义了应在何时以及如何从窗口中逐出事件。例如,根据持续时间或窗口中事件的数量,事件被逐出

目的

Windows有助于根据标准保留事件,这样,如果感兴趣的事件在窗口中,则可以聚合、关联或检查这些事件的值。

语法

Query Guide-Query From Insert_批处理_10

注:过滤条件和流函数可以在窗口之前和/或之后应用。

内置窗口

内置窗口

描述

time

以滑动方式基于时间保留事件

timeBatch

以翻滚/批处理方式基于时间保留事件

length

根据事件数量以滑动方式保留事件

lengthBatch

以翻滚/批处理方式根据事件数保留事件

timeLength

根据时间和事件数量以滑动方式保留事件

session

根据会话密钥保留每个会话的事件

batch

保留上次到达的事件块的事件

sort

基于参数值保留前k个或后k个事件

cron

以翻滚/批处理方式基于cron时间保留事件

externalTime

根据以滑动方式作为参数传递的事件时间值保留事

externalTimeBatch

基于以翻滚/批处理方式作为参数传递的事件时间值保留事件

delay

保留事件并以滑动方式将输出延迟给定时间段

例子1

从TempStream流中查询最近10个事件中的最高温度,并将结果插入MaxTempStream流。

Query Guide-Query From Insert_流处理_11

例子2

从TempStream流中查询每10个事件中的最高温度,并将结果插入MaxTempStream流。

Query Guide-Query From Insert_批处理_12

例子3

从TempStream流中查询最后10分钟内到达的事件的最高温度,并将结果插入MaxTempStream流。

Query Guide-Query From Insert_流处理_13

例子4

从TempStream流中查询每10分钟到达一次的事件的最高温度,并将结果插入MaxTempStream流。

Query Guide-Query From Insert_聚合函数_14

例子5

使用唯一扩展中的时间窗口进行查询,以找出在过去1分钟内到达的设备ID的唯一数量,并将结果插入UniqueCountStream流中。

Query Guide-Query From Insert_聚合函数_15

Event Type事件类型

查询输出取决于查询根据其内部处理状态生成的当前和过期事件类型。默认情况下,所有查询都会在事件到达时生成当前事件。当事件从这些窗口过期时,包含窗口的查询还会生成过期事件。

目的

事件类型有助于识别事件是如何产生的,并指定查询应在何时将此类事件输出到输出流,例如仅在新事件到达查询时、在事件从窗口过期时或在这两种情况下输出处理的事件。

语法

事件类型应在insert和into关键字之间定义,用于insert查询,如下所示。

Query Guide-Query From Insert_流处理_16

事件类型应定义在用于删除查询的for关键字旁边,如下所示

Query Guide-Query From Insert_批处理_17

事件类型应在更新查询的for关键字旁边定义,如下所示

Query Guide-Query From Insert_批处理_18

事件类型应定义在for关键字旁边,用于更新或插入查询,如下所示

Query Guide-Query From Insert_流处理_19

可以使用以下关键字来定义事件类型以操作查询输出

事件类型

描述

current events

仅在新事件到达查询时输出已处理的事件。这是未指定特定事件类型时的默认行为。

expired events

仅在事件到期时从窗口输出已处理的事件

all events

当新事件到达查询时以及当事件从窗口过期时输出已处理的事件

例子

查询以仅在事件从1分钟时间窗口到期时将已处理的事件输出到DelayedTempStream流。此查询有助于将事件延迟一分钟。

Query Guide-Query From Insert_流处理_20

Aggregate Function 聚合函数

目的

聚合函数封装了预先配置的可重用聚合逻辑,允许用户将多个事件的值聚合在一起。当与批处理/翻滚窗口一起使用时,这也将减少生成的输出事件的数量。

语法

Query Guide-Query From Insert_聚合函数_21

以下是一些内置的聚合函数

内置函数

描述

sum

根据一组值计算总和

count

根据一组值计算计数

distinctCount

基于一组值中的参数计算不同计数

avg

平均数

max

最大数

min

最小数

maxForever

从所有事件的整个生命周期中查找最大值,而不考虑窗口

minForever

从所有事件的整个生命周期中查找最小值,而不考虑窗口

stdDev

计算一组值的标准偏差

and

or

unionSet

通过统一一组值来构造一个集合

Group By

目的

Group By有助于按组合键为每个给定组独立执行聚合功能。

语法

Query Guide-Query From Insert_流处理_22

例子

查询以滑动方式计算最后10分钟时间窗口内每个房间的平均温度roomNo和deviceID组合,来自TempStream流中的事件。

Query Guide-Query From Insert_聚合函数_23

Having

目的

有助于根据select子句生成的属性选择与输出相关的事件,并省略不相关的事件。

语法

Query Guide-Query From Insert_批处理_24

Order By

目的

Order By有助于对查询输出块中的事件进行排序。只有当查询同时输出大量事件时(例如在批处理窗口中),Order By才会有效,而不是在每次只发出一个事件的滑动窗口中。

语法

Query Guide-Query From Insert_批处理_25

例子

查询以计算每10分钟批处理的每个roomNo和设备ID组合的平均温度,并按avgTemp升序排列生成的输出事件,然后按roomNo降序排列(如果有更多事件具有相同的avgTemp值),然后将其发送到AvgTempStream流。

Query Guide-Query From Insert_流处理_26

Limit & Offset

目的

“限制和偏移”有助于仅输出大型事件批次中选定的一组事件。这对于Order By子句非常有用,在Order By子句中,可以对输出进行排序并提取topK或bottomK事件,甚至可以使用它通过从中间获取一组事件来对数据集进行分页。

语法

Query Guide-Query From Insert_批处理_27

例子1

查询以根据到达TempStream流的事件计算每10分钟批次的平均温度(每个房间编号和设备ID组合),并仅发出两个具有最高avgTemp值的事件。

Query Guide-Query From Insert_批处理_28

例子2

查询以计算到达TempStream流的事件每10分钟批次的平均温度、每个房间的编号和设备ID组合,并根据其avgTemp值按降序排序时仅发出第三、第四和第五个事件。

Query Guide-Query From Insert_批处理_29

Stream Processor 流处理器

流处理器是流函数和窗口的组合。它们直接在输入流(或命名窗口)上工作,生成零个或多个具有零个或更多附加输出属性的新事件,同时能够保留和任意发出事件。它们比流函数更高级,因为它们可以保留和任意发出事件;它们比窗口更高级,原因是它们可以为事件添加额外的属性。

目的

流处理器有助于实现其他结构(如函数、聚合函数、流函数和窗口)无法实现的复杂执行逻辑。

语法

Query Guide-Query From Insert_聚合函数_30

内置流处理器

内置流处理器

描述

log

记录日志

Join (Stream)

联接根据指定的条件实时组合来自两个流的事件。

目的

Join提供了一种关联两个流的事件的方法,此外还可以根据定义的窗口聚合它们。

两个流不能直接连接,因为它们是无状态的,并且不保留事件。因此,每个流都需要与一个用于加入的窗口相关联,因为它可以保留事件。Join还接受一个条件,将事件与每个事件流窗口相匹配。

在加入过程中,每个流的每个传入事件都基于给定条件与另一个流的窗口中的所有事件相匹配,并且为所有匹配的事件对生成输出事件。

语法

Query Guide-Query From Insert_流处理_31

在这里,这两个流都可以有可选的非窗口处理程序(过滤器、流函数和流处理器),然后是与它们相关联的窗口。它们还可以在on关键字旁边有一个可选的<join condition>,以匹配两个窗口中的事件,从而生成组合输出事件。

支持的联接类型

Inner join (join)

Left outer join

Right outer join

Full outer join

例子1(join)

一个查询,用于在StockStream流上最后10分钟到达的事件和TwitterStream流上最近20分钟到达的活动中存在具有相同符号和companyID组合的匹配事件时生成输出。

Query Guide-Query From Insert_流处理_32

例子2(with no join condition)

一个查询,用于从StockStream流的最后5个事件和TwitterStream流上最后1分钟内到达的事件中生成所有可能的事件组合的输出。

Query Guide-Query From Insert_聚合函数_33

例子3(left outer join)

用于为到达StockStream流的所有事件生成输出的查询,而不管在TwitterStream流上最后20分钟到达的事件中是否存在符号的匹配companyID,并且仅当在StockStream流上最后10分钟内到达的事件中存在matchine符号和companyID组合时,才为到达StockStream流的事件生成输出。

Query Guide-Query From Insert_批处理_34

例子4(full outer join)

一个查询,用于为StockStream流和TwitterStream流中的所有事件生成输出,而不管其他流窗口中是否存在符号的匹配companyID。

Query Guide-Query From Insert_流处理_35

例子5(unidirectional join)

只有当事件到达StockStream流时才生成输出的查询才能找到与TwitterStream流上最后20分钟到达的事件具有相同符号和companyID组合的匹配事件。

Query Guide-Query From Insert_批处理_36






【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
ha7vY1zXUFvq
最新推荐 更多

2024-05-31