odps窗口函数

统计量:count,sum,avg,max/min,median,stddev,stddev_samp
排名:row_unmber,rank,dense_rank,percent_rank
其他类:lag,lead,cluster_sample
--------------------
基本用法;把数据按照一定条件分成多组称为开窗,每个组称为一个窗口
partition by部分用来指定开窗的列
分区列的值相同的行被视为在同一个窗口内
order by用来指定数据在一个窗口内如何排序
使用限制:只能出现在select子句中
窗口函数中不要嵌套使用窗口函数和聚合函数
不可以和同级别的聚合函数一起使用
一个odps sql语句中,可以使用至多5个窗口函数
Partition开窗时,同一窗口内最多包含1亿行数据
用rows开窗时,x,y必须大于等于0的整数常量,限定范围0-10000,值为0时表示当前行
必须使用order by才可以用rows方式指定窗口范围
并非所有的窗口函数都可以用rows指定开窗方式,支持这种用法的窗口函数有avg,count,max,min,stddev和sum
----------------------
举个栗子
select *,rank() over(partition by monitor_id order by distance) as mindistance_monitor_id from()

select *,rank() over(partition by monitor_id order by distance) as mindistance_monitor_id from()
算地图经纬度距离:
sqrt(pow((lng-jiaojin_lng)*111000,2)+pow((lat-jiaojin_lat)*111000*cos(30),2)) as distance 
时间开窗:
select *,row_number() over(partition by id_card order by info_enabled_time desc) as cnt from ods_prsn_census_person_info_gaj_m
where dt='${today}' and write_off_sign_no='0' and person_status_no='0'
ROW_NUMBER()排序和rank()区别,后者并列排序
字段拆分成列函数:
select cast(rid as string) as rid,
                    adcode,
                    wm_concat(';',concat(rdseg_id,',',rdseg_name,',',rdseg_len)) as rdseg_info_list
                from 
                    ${dwd_tfc_bas_rdnet_rdseg_info}
                    LATERAL VIEW  explode(SPLIT(ridseq,',')) middle_table as rid    
                where 
                    data_version = '${data_version}'
                    and adcode = '${adcode}'
                group by 
                    cast(rid as string),
                    adcode
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值