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
 

你可能感兴趣的:(大数据)