Sql中的window

之前上数据库课的时候还是看过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)

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容