Sql中的window

2020-09-08  本文已影响0人  NatsuYori

之前上数据库课的时候还是看过window这个概念的,但是好久没用了…基本忘光…
用到这个函数的起因,是在组织feature的时候需要历史特征,本来只需要前一天的历史数据,用filter筛出数据,再join回去就好了,但是由于在实验阶段,扩展到最后需要前7天的数据,可想而知那个代码改的老长…当然window函数也就在某些特定情况才能用的

Window In Scala

在scala中,定义窗体对象

 windowObj = window.partitionBy(field1, field2, ...).orderBy(filed_N)

这里可以看做是定义了一个规则,按照parition中指定的field进行分区,然后这些分区按照fileld_N进行排序
一般窗体对象还可以和rowsbetween和rangebetween一起使用,rowsbetween指的就是排序后的分区块间距,rangebetween则是具有数据含义的,根据filed的值,在指定range范围内的都会被筛进来

  windowObj = window.partitionBy(field1, field2, ...).orderBy(filed_N).rowsbetween(-4,-1)

表示根据filedn顺序分区之后,在这个分区块的往前4块到1块的分区
这样只是定义了窗体的对象,在df需要使用窗体的时候,用over(windowObj)从窗体中抽取对应的数据,比如使用

collect_list(filed1).over(windowobj)

可以从窗体中抽取对应行的窗口数据

上一篇下一篇

猜你喜欢

热点阅读