凡科网站建设之后怎么删除,网站建设的背景有哪些,常熟网站网站建设,网页设计适合女生吗多维分析
需求#xff1a;有一张test表#xff0c;表的字段为#xff1a;A, B, C, amount, 其中A, B, C为维度字段#xff0c;求以三个维度任意组合#xff0c;统计sum(amount)
Union方案#xff1a; A, B, C的任意组合共有8种#xff0c;分别为#xff08;A, B,C,AB…多维分析
需求有一张test表表的字段为A, B, C, amount, 其中A, B, C为维度字段求以三个维度任意组合统计sum(amount)
Union方案 A, B, C的任意组合共有8种分别为A, B,C,AB,AC,BC,ABC,空集然后每种类型的个数也不一样需要补足空白的字段将每种类型进行group by sum 求和后Union在一起 Flink方案 前面的语法一样group by grouping sets (A,B,C,(A,B),(A,C),(B,C),(A,B,C),())group by cube(A,B,C)roll up (A,B,C) ⇒ ((A,B,C), (A,B),(A),()) Hive提供的Grouping Sets
窗口 分组窗口 groupWindow 分类 滚动窗口滑动窗口Hop Windows会话窗口 窗口表值函数 window TVF(支持topN) 滚动窗口滑动窗口Hop Windows累积窗口Cumulate Windows会话窗口Sesssion Windows(不支持) 开窗函数 over API的用法 计数窗口(SQL中不支持计数窗口) 计数滚动Tumble.over(rowInterval(5L)).on($(处理时间)).as(w)计数滑动(窗口的首次计算必须达到窗口大小)Slide.over(rowInterval(5L)).every(rowInterval(3L)).on($(pt)).as(w)使用窗口table.window(w1).groupBy($(w), $(id)).select($(id), $(vc)).execute().print(); 时间窗口 滚动Tumble.over(lit(5).seconds()).on($(“pt”)).as(w);滑动Slide.over(lit(5).seconds()).every(lit(3).seconds()).as(“w”);会话:Sessino.withGap(lit(3).seconds()).on($(“pt”)).as(“w”);使用窗口 table.window(w7).groupBy( ( w ) , (w), (w),(“id”)).select() SQL的用法
//滚动时间窗口
select id,tumble_start(pt,interval 5 second) as wStart,tumble_end(pt,interval 5 second) as wEnd,sum(vc) sumvc
from t1
group by tumble(et,interval 5 second),id;//滑动时间窗口
selectid,hop_start(pt,interval 3 second, interval 5 second) as wStart,hop_end(pt,interval 3 second, interval 5 second) as wEnd,sum(vc) svc
from t1
group by hop(et,interval 5 second,)WindowTVF窗口表值函数只有SQL形式
//滚动窗口
select window_start,window_end,SUM(price)
FromTable(tumble(table t1,descriptor(pt)),//事件时间改为etinterval 5 second)group by window_start, window_end, id;//滑动窗口(窗口大小必须是滑动步长的整数倍)
select window_start,window_end,SUM(price)
FromTable(hop(table t1,descriptor(pt)),interval 3 second,//滑动步长interval 6 second//窗口大小)group by window_start, window_end, id;//累积窗口(统计类似0~1,0~2,0~3这样的窗口/)
select window_start,window_end,SUM(price)
FromTable(cumulate(table t1,descriptor(pt)),interval 2 second,//步长一般为小时interval 10 second//每一轮的大小一般为一天)group by window_start, window_end, id;Over聚合函数划定一个范围对窗口内的每条数据都做统计 SQL语法over(partition by t1 order by t2 )API语法 定义窗口(无法指定下无边界流式数据无法明确下边界)Over.partitionBy($(id)).orderBy( $ (pt)).preceding(unbounded_row).follow(current_row).as(w);定义上两行到当前行Over.partitionBy( $ (id)).orderBy( $ (pt)).preceding(rowinterval(2L)).follow(current_row).as(w);基于时间上无边界到当前时间Over.partitionBy($(id)).orderBy( $ (pt)).preceding(unbounded_range).follow(current_range).as(w);上两秒到当前时间Over.partitionBy( $ (id)).orderBy( $ (pt)).preceding(lit(2).second()).follow(current_range).as(w);使用窗口sum().over( $ (w1)) SQL 语法
//上无边界到当前行
selectid,vc,sum(vc) over (partition by id order by pt rows between unbounded preceding andcurrent row ) sumvc
from t1;//上两行到当前行//上无边界到当前时间//上两秒到当前时间
TopN
窗口表值函数 over窗口实现
统计用来排名的数值点击次数和窗口时间信息
//统计每个user的点击次数
select user,count(*) cnt,window_start,window_end
from Table(tumble(talbe t1, descriptor(et), interval 10 second)
)
group by window_start, window_end,user;按照点击次数排名按照窗口结束时间分区再排名目前Flink1.17只支持row_number函数 原本order by 后面只能是时间字段且只能是升序如果FLink能够识别当前操作是TopN的情况下支持在order by后面出现非时间字段
(selectuser,cnt,row_number() over(partition by window_start,window_end order by cnt desc ) rk
from t2) t3
取TopN进行where过滤 where row_num N, 这段代码是识别为TopN查询的关键.
selectuser,cnt,rk
from t3
where rk 3;实际上所有代码可以合并为一个整体
去重
TopN的特殊写法根据主键开窗只取where row_num 1的数据即能达到对重复数据进行去重的效果。
需求统计每个窗口中每个url最后到达的数据
(select url,ts,window_start,window_end
from ) as t1//按照窗口的开始时间和结束时间url进行分区通过时间排序求排名
(selecturl,ts,window_start,window_end,row_number(partition by window_start, window_end, url order by ts desc) rk
from t1;) as t2// 取rk 1
select url,ts,window_end
from t2
where rk 1;