需求背景有时候常规周(周一到周日)不能满足我们的业务场景,需要自定义周来实现。例如:如何实现周四到周三为一周? 实现方法非直连数据集
Spark SQL当中 dayofweek() 函数是从星期日到星期六为一个周,也就是1到7,想得到常规星期需要 dayofweek([日期])-1。
case when dayofweek([日期]) in (1,5,6,7)
高性能数据集
toDayOfWeek, 将Date或DateTime转换为包含一周中的某一天的编号的UInt8(周一是1, 周日是7)类型的数字。
toWeek(日期[,模式]) ,返回Date或DateTime的周数。两个参数形式可以指定星期是从星期日还是星期一开始,以及返回值应在0到53还是从1到53的范围内。如果省略了mode参数,则默认 模式为0。
case when [返回星期几] in(4,5,6,7) then ([正常周]+1) else [正常周] end
【注意事项】:初始的日期字段必须是Date或是DateTime类型的,如果不是的话 需要做先做转换,toDate/toDateTime函数的日期和日期时间格式定义:YYYY-MM-DD 或者 YYYY-MM-DD hh:mm:ss |