00:00
在代码里面把也做一个整体的测试啊,那这里面本来我们这个是1.1和1.2。上面是window,接下来我们做window的输出window啊,那同样这里边我们首先2.1,也是先来看day,呃,Table API里边的一个调用方式啊,这里边的调用跟前面几乎都一模一样,对吧?呃,就是呃,当然不是跟group window一模一样啊,就是说呃,整体来讲这个模式基本上是类似的啊啊这里边我们定义一个over result,然后基于当前的还是sensor,比方说我们现在定义什么呢?哎,我要呃,对于每一行每一条数据啊,然后呢,我要的是什么呢?对于每一个sens的数据,它自己的那个传感器啊,然后我们按照事件时间把它排序下来,统计呢,当前每一行跟它之前的两个温度值,也就是之前的两行,它们三个算一个平均温度,大家想想能不能做到呢?
01:10
然是能做到的,对吧,呃,这里边我们要这个需求的话,做的就是一个就是一开窗函数了,对吧,给大家看一下这个需求,我们是统计统计啊,每每个三每条数据,呃。与之前两行数据的平均温度啊,当然我们是按照实线时间排序对吧?这个我就不再呃整体的去介绍了啊那这里边我们直接点window开始做,大家知道接下来就是window对吧?这里边要传的是一个over window了,那这个over window你看到它这个其实是可以传多个的对吧?啊参数是有点点点的,然后这里边它能调的方法呢,哎,你看这里边就是你除了一一堆这个,呃,这这里边我可以做各种各样的这个get操作对吧?呃,可以get order get following get position啊那另外我们接下来能去调用它这里边的可以可以指定什么呢?指定当前的positionition对吧,指定这个,呃,就是这里边它它有一些对应的这些呃方法和属性啊,这里边有它的这个别名,有它的following,有它的proceeding,还有order,还有。
02:36
Pet,然后它所有的这些定义其实都是靠我们后面的这个方法来实现的,对吧?哎,所以接下来我们就还是啊,同样的这种调用,对于这个over这样一个类,直接把它定义出来引入啊,同样还是引入这个table API里面的,接下来呢啊BY对吧?啊,直接调这个方法,当然对于就是我们当前的这个方法而言啊,大家会看到就是它基于当前的这个over这个class啊这里边呢,得到的是一个over window partition的对吧?啊就是over这个class,你你看到这里边它其实刚才我们点进的,点进去的是那个over window那个类对吧?啊,那个类里边能调用的方法是获取当前的这些参数,那我们现在定义这个over window,想要得到一个over window的时候呢,是要基于over这个类,Over这个类里面能调的方法大家看到了,其实就是order by和positionition by对吧,我。
03:36
比如说positionition by是一个可选的一个方法啊,它得到的是一个overw window positionition的,那如果说你直接这个order by的话,它得到的是一个overw window positionition的ordered对吧?啊,那这个其实就是一个细小的差别啊,就是呃,经过这个positionition by之后,你会看到他得到这个overw window positionition呢,接下来也必须得通过这个order by这个操作得到一个over window positionition的order的,所以说这个order by是不可避免的啊,Position by可以可以去掉,但是我们推荐大家还是要做一个分组,那然后得到的这么一个类型,接下来又调什么方法呢?继续往后看啊,那就必须得有一个,呃,就是可以有一个preding对吧?我们说这个可省对吧?可以有一个preding得到一个over window positionion的order的proceeding。哎,这个好长了,这这个类太长了啊,但是我们知道它其实又加了一个proceeding前之。
04:36
多长多多少的范围,多长的距离,这样的一个限制而已嘛,它里边能调的呢,哎,这里边还有一个following也是可选的对吧?哎,那接下来就是,呃,就是还得到的是这样的一个order的proceeding这样一个类,那接下来最后再调的必须得掉一个as方法,对吧?或者说我们直接直接在前面这个over window position的ordered之后,在这个preing之前,直接就叫as给一个别名,最后就得到了over window了啊然后在里边我们看到它是可以去把这些get出来,对吧,我们最终是想得到这个东西,所以接下来这个方法啊,就跟之前我们那个这个group window里面的调用一样啊,就是其实它一层一层的调,里边的做这个方法调用而已,我们呢,往往就会把它分开,按照这个空格的方式把这个方法调用写开,看起来就像一句话一样啊,这个可读性就更强,那我们现在当然是position by ID啦,呃,后边。
05:36
Can在ordered by order by对吧,Order by一个时间字段,然后接下来是preceing之前的两行数据,那当前应该是preceing Rose对吧,两行,所以是2.rose,最后在as一个当前,我们叫ow对吧,Over window把它定义出来,这就是一个完整的定义过程,诶,那后边得到的这个啊,你你开窗这个window之后,它得到的呢,是一个over window的table,然后这个over window table里边就只有一个方法s selectp对吧?啊,所以就只有在这个s selectp的语句里边,你基于之前定义好的那个窗口别名,然后去调用我们的那个呃,聚合函数就完事了,那最后就得到了table对吧?所以这个流程都是定义死的,大家下来之后就是按照流程去测一测,也就知道怎么做了。那接下来slept,我们想要的,比方说要这个ID对吧,呃,然后后。
06:36
边啊,比方说我还想要当前的这个TS,当前的这个时间到底是多少啊,另外呢,我统计一下当前的这个个数啊,Count,这其实就是看看我们自己想要什么数都可以拿出来啊呃,另外就是还有这个当前的,呃,那注意这个如果要是点count的话,这已经是调用了聚合函数了,所以必须得over当前的ow对吧?啊,必须得把这个定义清楚啊,开窗函数你必须over这个才可以,要不然的话,我们之前那个是有group by嘛,你知道是根据窗口分组,现在又没有分组,所以就只有是over这样去写。那另外还有那个平均值啊,平均值我们就是temperature温度的平均值,这个才是关键啊,Avg对吧?呃,同样也要有一个over ow,这样的话,就把我们想要的内容就全统计出来了,哦呃那呃大家知道,最后你如果要打印。
07:36
出的话,是不是同样也可以直接over table,哎,大家想现在我们是to stream还是to stream呢?哎,这个大家想到每一行它都统计一次,然后输出结果,这就是一条数据对吧?哎,这这其实每一行都统计这么一次,这并不会更改之前的结果,所以说这当然是apad就可以了,对吧?就当然你如果想check也可以,但是没有必要啊,那同样后面我们还可以有一个2.2这个CQ的实现方式,CQ的实现方式的话,跟之前一样,表已经注册过了,我们就不再注册了啊,直接定义一个over result CQ table,直接用这个环境table env调用CQ query里边写一个CQ进来,对吧?啊,那这个怎么写呢?Select,我们现在要的是ID啊,还有我就直接写在这了啊。
08:36
的这个这同样over ow,呃,这个就完了,我们想选的就是这么四个字段嘛,啊跟上面我们这里边select定义的是一模一样啊,大家看这个table API就是反过来写对吧,最后select,而我们这里边就相当于是先select啊,大家知道CQ的执行顺序其实也是这样的是吧,先执行后面我们那里的分组啊聚合呀啊最后我们再把它执行这个select映射出来啊,那接下来就是from啦,From sensor后面接下来,哎,接下来得定义window了,对吧,Window OS,哎,这里。
09:36
里边这个别名是ow,然后我们得知道里边到底怎么样去定义,那同样还是ID对吧,然后all的BYTS,那后面还有这个定义,这个范围,我们现在要是Rose between对吧,E,呃,T对吧?然后2PROCEED,这个就是大家要注意这些单词不要拼错了,一旦要拼错了的话,执行Co肯定是肯定是有问题的对吧,And current肉啊,就是这样啊,当然大家如果要是明确去写的话,像我们这些关键字啊,一些方法呀,最好还是大写对吧?我这里边是省事啊,就直接给大家这么写出来就完事了啊,那这就是一个完整的over window的一个定义过程啊,当然得到的这个结果呢,我们也可以做一个打印输出over result,呃,CQ。
10:36
Table对吧,直接打印输出,你这里边APA就可以,Totra也是没问题的,那我们来执行一下,好,我们现在来看到这里运行结束,看到了执行的结果,哎,大家看这个这里啊,这也是啊,前面都是result,后面都是CQ啊我们看一下result第一条数据来了之后,哎,我们不是求平均值嘛,啊,那是三多少,35.8还是三十三十五点八对吧?然后后边这个六七十这均数只有他自己一个,然后后边第二条数据,大家回忆一下,这个341的第二条数据是一个32对吧,32来了之后,你跟35.8取一个平均数,33.9对吧?啊,然后又来了一个36.2,那它会大一点变成了30啊34.67大概这么一个数,那后面再来一个二,29.7又变小了,对吧?啊,32.6几,30.9又变小了,32.26,那这个大家看到算出来的结果跟这个CQ这边的输出是一模一样的,对吧?哎,我们把这个。
11:36
平均数就输出了,而且你会看到这里边都是添加,都是出,针对每一个数都要做这样的一个统计输出,对吧?而且我们看到这里边我们统计的这个数量啊个数,这个是抗的那个数量,大家还记得吧,这个数量11112,诶这里边是因为当前我当前这个数据之前还有一条对吧?哎,总共那就是两条一起来算,然后是三之前有三条对吧,共合起来算,再接下来就全是三不往上涨了,因为我们只是统计什么呢?诶大家注意从就是这里边我们这个,呃,这应该是倒数第三条数据,就是208这条数据啊,36.2开始,它统计的其实是什么呢?就是当前这个32 36.2,还有我们前面啊,这个35.8这三个数的这个平均数对吧,那下一次统计的呢,其实是后边三个数的平数对吧,第一个35.8就就没有参和进来了。
12:36
所以大家看这个一下子小了挺多的是吧?啊,这个明显比那个之前我们那个34.6是小了很多啊,并不是所有的数的一个平均数,大家如果感兴趣的话,可以具体把这个算一算,看看对不对,同样后边我们这个C口这里也是到三往上就不涨了,对吧?啊,就是最多我们统计三个数,当前的和之前的两个,这就是关于over window的用法。
我来说两句