#6/20/24 增加greatest函数
select greatest(1,2,3,4,5,2)
结论:可以用hive presto spark得出正确的结果值
#6/20/24 增加last_value(cl1) ignore nulls over(order by ts ) as dt 函数:
有数据集:
| 1 | 1 | 1 |
| 2 | 2 |
|
| 3 | 3 |
|
| 4 | 4 | 3 |
| 5 | 5 | 5 |
| 6 | 6 |
|
需要把C2为空的值填充成上一行不为空的值
结果应该看起来是如下(黄色部分为程序添加内容):
|
序号
|
c1
|
c2
|
|
1
|
1
|
1
|
|
2
|
2
|
1
|
|
3
|
3
|
1
|
|
4
|
4
|
3
|
|
5
|
5
|
5
|
|
6
|
6
|
5
|
presto 程序:
select
c1,c2,last_value(c2) ignore nulls over(order by c1) as new_c2
from jdt_dev.ccc_xx order by c1
结果值:
|
序号
|
c1
|
c2
|
new_c2
|
|
1
|
1
|
1
|
1
|
|
2
|
2
|
|
1
|
|
3
|
3
|
|
1
|
|
4
|
4
|
3
|
3
|
|
5
|
5
|
5
|
5
|
|
6
|
6
|
|
5
|
spark 程序 运行会有相同以上的结果:
select
c1,c2,last_value(c2,true) over(order by c1) as new_c2
from jdt_dev.ccc_xx order by c1
#6/28/24 增加sum() over() 函数
在大促等活动中,有关方需要看从第一分钟开始的每分钟的累计,并用实时数据与离线数据做同步。该函数在离线的数据集中就发挥作用了。
首先,离线会出每分钟的新用户数或是金额 ,主键可以认为是每分钟的结束时间等。
第二部,就是用函数计算累计 ,sum(amt) over(order by time ) -- 时间为正序排除
该函数的高级应用,增加计算的边界,具体语法见语句:
SUM(gmv) OVER(partition by team_name order by month range between 2 preceding and 0 following) AS pay_amt
RANGE BETWEEN 2 PRECEDING AND 0 FOLLOWING: 这个子句定义了窗口的具体范围。RANGE 窗口是根据有序的列来定义的,BETWEEN ... AND ... 指定了窗口的边界。
2 PRECEDING 表示窗口从当前行开始向上数两行。
0 FOLLOWING 表示窗口包括当前行本身,但不包括任何后续行。
1895

被折叠的 条评论
为什么被折叠?



