00:00
好,同学们,这一节呢,我们去看一下这个开窗的函数啊,开窗的操作对我们整个呃,脚本执行的一个性能上的影响,在此之前呢,我们先去看一下之前在这个文档里面引用的官方文档啊,在前面的我插了一个链接。好,可以看到。好,我们点开一下,然后直接在浏览器里面去看。啊好,可以看到呢,这里面其实它有一个啊,我们这个说是要达成位置下推,你有哪些函数是支持的啊,你可以看到呢,这里有一堆这个聚合函数呢,它是支持下推的啊,另外呢,就是还有一些window开窗之后的一些操作,它也是支持下推的啊,所以说呢,这一节呢,我们就给大家演示一下,我们开窗之后呢,如何对这个操作啊进行一个下推。呃,那么另外呢,还需要注意一下,这里面呢,还有一些操作是group by group之后,还有这个salt之后呢,进行了一些呃合并,但是呢,要注意啊,这两步操作呢,要合并的话,只是在我们的in Fla DB cloud这个产品上呢,它支持这个操作啊,在我们的oss这节课讲的oss就独立部署的这个方式上呢,啊,是没有这个合并操作的,那么这个cloud呢,是一个付费才可以使用的一个产品,所以说呢,我们不讲这些东西,只讲这个window之后的一些操作,呃,那么现在呢,我们直接返回到data explorer里面。
01:23
啊,去写我们的脚本,现在这个数据呢,已经查出来过滤出来了,我把这个表达式呢,换成我们的常量。好,现在呢,我们去做一个开窗,使用温度函数。好,可以看到我这里面有一些呃参数啊,那么这里面呢,需要去指定的一个参数,就是这个A表示我们的,我们这里呢,可以每十秒钟开一个窗,好接下来呢,我们就可以进行一个聚合的操作,我们看一下比如说sum。啊,那么这里呢,需要指定一个列。
02:01
啊,还是平均值吧,Me需要指定一个列,那么这里的列呢,我们就给它指定为,呃,Value_value v啊,点sum。啊,现在呢,我们直接看到最后一页。翻页看到最后一页。哎,可以看到呢,我这里呢,做了一个开窗聚合操作,但是在我们的这个执行情况来看呢,它只有一步操作,那么这个操作的名字就叫read window aggregate。呃,也就是说呢,他在读取数据的时候呢,顺便把这个开创聚合的操作就完成了啊,那么我们现在呢,可以在这个filter之后呢,再加上一步操作可以看一下啊,比如说我现在呢,呃,写一个map函数啊,这个map函数呢,我们给他一个匿名函数。输入呢,就是每一行数据,然后返回呢,还是每一行数据,相当于呢,我们这一个,呃,函数呢,就什么都没有做啊,什么都没做,数据呢,原样的进来,原样的出去,我们再看一下。
03:01
好,直接看到最后一页。现在呢,我们发现啊,这个整个的一个操作呢,就被直接打散了。啊,原先呢,我们只是一步操作,现在呢从一步变成了四步,我们可以看一下,第一步操作呢,是从这个from到filter,它这里写的是morge的readrange,啊,还有这个filter,也就是这两步呢,其实合成合成一个了啊,按照时间过滤和按照这个维度过滤呢,合成一个后面呢,紧跟着的是我们的map操作,随后呢是温度操作,有开窗和取平均值的操作,好那么现在呢,我们可以把这个往下拉一下。然后来回切开,切下叶。啊,我们可以看到之前的这一个。哎,整个查询的一个情况,这里面呢,有一个CU Du,我们还是去比较一下这个指标,现在呢,我截个图。啊,刚才的那个操作呢,一步的操作呢,我没有截图,我把这个map呢删掉,重新运行一下submit。
04:02
好,可以看到直接看到这个页尾啊,然后完了之后呢,我们再看这个。看一下他们之间差多少啊,此处呢,我们还是去开一个这个时间的单位转换。那么现在呢,这个是1458。0564。呃,可以看到呢,这是0.01458秒啊,这边呢,我们再去转换一下是246。20953。好可以看到呢,这边是0.24621秒啊,其实差的不是很多。啊,为什么没差多少呢?首先我们要分清这两次执行之间的差别啊,这个撤销一下,把这个map呢再找回来。好,我现在点击一下,我们再看到最后的操作。呃,那么现在呢,我们是把这个数据呢,从从这个filter之后啊,这个序列里的数据呢,直接拿到内存里面来,在内存里面呢进行开窗和取平均值的操作,那么为什么这个时间上差距不大呢?是因为我这里呢是按十秒一开窗,而我们这个这个text in里面的数据呢,也是十秒钟一采集,也说明我每个窗口里面呢只有一条数据,那么这样一看呢,从磁盘到内存的IO和我直接哎直接让变向一步操作的这个数据量呢,差距的就不是很大,如果我现在呢,把这个呃这个窗口的哎大小变大,比如说呢,我现在不是十秒钟一开窗了啊,我现在变成三分钟一开窗,我们再次点击submit。
05:34
啊,直接看到最后一页。可以看到呢,现在的一个持续时间啊,执行时间是62299750,把它复制一下啊,截图一下,在此处呢,我还是再加上那个卖操作。再次点上。好,我们看最后一页。得把这个下拉一下。好,可以看到呢,这里面有一个执行的持续时间,其实现在呢,差距越来越大。
06:04
再次去这个时间转换,我们看一下6299750。啊,那么这个呢,相当于0.0062秒,接下来呢,我们再去看一下这个啊,我们这个操作被打散的,没有进行下推的这个操作,23412740啊那么可以看到呢,现在这个时间的差距呢,就从原来的两倍呢,拉开到了这个四倍的左右,呃,主要是因为我们的这个window的window的操作。看一下这个温度的操作。在我们的外部UI。啊,主要是这个window的操作呢,它导致我们在这个内存里面的使用的数据量不一样。他们之间的差距呢,主要就是在呃,磁盘到内存的这样一个IO的时间啊,那么最后呢,总结一下就是这个window和me在我们的flax脚本里面呢,如果你想让它进行一个优化的话啊,这个window呢,一定要跟在过滤之后啊,中间呢不能再加别的操作,呃,Window呢,紧跟在filter之后呢,才是真正的一步操作。
07:06
啊,可以看到呢,这里面操作呢,又变回到一步啊,那么这里呢,就是我们整个开窗操作呢,要注意的一个优化的点。
我来说两句