Flink SQL 知其所以然:Window TopN 操作

Window TopN

大家好,今天我们来学习 Flink SQL 中的 Window TopN 操作。

  1. ⭐ Window TopN 定义(支持 Streaming):Window TopN 是一种特殊的 TopN,它的返回结果是每一个窗口内的 N 个最小值或者最大值。
  2. ⭐ 应用场景:小伙伴萌会问了,我有了 TopN 为啥还需要 Window TopN 呢?还记得上文介绍 TopN 说道的 TopN 时会出现中间结果,从而出现回撤数据的嘛?Window TopN 不会出现回撤数据,因为 Window TopN 实现是在窗口结束时输出最终结果,不会产生中间结果。而且注意,因为是窗口上面的操作,Window TopN 在窗口结束时,会自动把 State 给清除。
  3. ⭐ SQL 语法标准:
SELECT [column_list]
FROM (
   SELECT [column_list],
     ROW_NUMBER() OVER (PARTITION BY window_start, window_end [, col_key1...]
       ORDER BY col1 [asc|desc][, col2 [asc|desc]...]) AS rownum
   FROM table_name) -- windowing TVF
WHERE rownum <= N [AND conditions]
  1. ⭐ 实际案例:取当前这一分钟的搜索关键词下的搜索热度前 10 名的词条数据

输入表字段:

-- 字段名         备注
-- key              搜索关键词
-- name             搜索热度名称
-- search_cnt       热搜消费热度(比如 3000)
-- timestamp        消费词条时间戳

CREATE TABLE source_table (
    name BIGINT NOT NULL,
    search_cnt BIGINT NOT NULL,
    key BIGINT NOT NULL,
    row_time AS cast(CURRENT_TIMESTAMP as timestamp(3)),
    WATERMARK FOR row_time AS row_time
) WITH (
  ...
);

-- 输出表字段:
-- 字段名         备注
-- key              搜索关键词
-- name             搜索热度名称
-- search_cnt       热搜消费热度(比如 3000)
-- window_start     窗口开始时间戳
-- window_end       窗口结束时间戳

CREATE TABLE sink_table (
    key BIGINT,
    name BIGINT,
    search_cnt BIGINT,
    window_start TIMESTAMP(3),
    window_end TIMESTAMP(3)
) WITH (
  ...
);

-- 处理 sql:
INSERT INTO sink_table
SELECT key, name, search_cnt, window_start, window_end
FROM (
   SELECT key, name, search_cnt, window_start, window_end, 
     ROW_NUMBER() OVER (PARTITION BY window_start, window_end, key
       ORDER BY search_cnt desc) AS rownum
   FROM (
      SELECT window_start, window_end, key, name, max(search_cnt) as search_cnt
      -- window tvf 写法
      FROM TABLE(TUMBLE(TABLE source_table, DESCRIPTOR(row_time), INTERVAL '1' MINUTES))
      GROUP BY window_start, window_end, key, name
   )
)
WHERE rownum <= 100

输出结果:

+I[关键词1, 词条1, 8670, 2021-1-28T22:34, 2021-1-28T22:35]
+I[关键词1, 词条2, 6928, 2021-1-28T22:34, 2021-1-28T22:35]
+I[关键词1, 词条3, 1735, 2021-1-28T22:34, 2021-1-28T22:35]
+I[关键词1, 词条4, 7287, 2021-1-28T22:34, 2021-1-28T22:35]
...

可以看到结果是符合预期的,其中没有回撤数据。

  1. ⭐ SQL 语义
  • ⭐ 数据源:数据源即最新的词条下面的搜索词的搜索热度数据,消费到 Kafka 中数据后,将数据按照窗口聚合的 key 通过 hash 分发策略发送到下游窗口聚合算子
  • ⭐ 窗口聚合算子:进行窗口聚合计算,随着时间的推进,将窗口聚合结果计算完成发往下游窗口排序算子
  • ⭐ 窗口排序算子:这个算子其实也是一个窗口算子,只不过这个窗口算子为每个 Key 维护了一个 TopN 的榜单数据,接受到上游发送的窗口结果数据进行排序,随着时间的推进,窗口的结束,将排序的结果输出到下游数据汇算子。
  • ⭐ 数据汇:接收到上游的数据之后,然后输出到外部存储引擎
本文链接:https://www.dzdvip.com/34426.html 版权声明:本文内容均来源于互联网。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 395045033@qq.com,一经查实,本站将立刻删除。
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年7月5日 21:50
下一篇 2022年7月5日 22:04

相关推荐

  • 日落黄昏的唯美句子

    1、傍晚的景色令人陶醉:露水滋润着萎靡的花草,没有风,四周异常宁静,空气凉爽宜人。 2、最美不过日初升,最灿不如黄昏景。日出日落似人生,不惑宛如日当头。 3、那是一个温和而软化了的黄昏,空气中一片温和、芬芳。 4、已是黄昏独自愁,更着风和雨。 5、落日,是边塞特有的夕阳,在我的心目中,夕阳含情脉脉,是一位温文尔雅的女子。 6、红日夕阳西下,老人古树黄花,夕日夕阳美好,只有黄昏刹那。 7、晚霞闪烁着辉煌的光芒,这是在天黑之前留给万物的最后的纪念。 8、百鸟归林 夕阳残照 夕阳正美 夕阳将坠 夜幕降临 9、青山翠竹隐人家,篱外黄瓜映晚霞。袅袅炊烟房顶绕,依依果树鸟飞斜。 10、清晨的朝阳、夕阳的黄昏。一个是美好的开始,另一个却是凄美的结束。 11、夕阳西下人西辞,执笔纸上落几字。又是桃花纷飞时,故人归家是何日。 12、想你的时候夕阳是你,晚霞是你云中月是你,点点星辰也是你。 13、傍晚的夕阳余晖下,晚霞照耀的天空很美!碧绿的麦田和天空成为一体。 14、我落日般的忧伤就像惆怅的飞鸟,惆怅的飞鸟飞成我落日般的忧伤。 15、我喜欢,黄昏西下至稀疏树梢后的夕阳,那远远的温暖一直温暖到你心灵的深处,让你有种让时间就此停止,就这样一直温暖着的祈愿。 16、夜幕临空的落日,总是给人一种简单的温暖,有他和它是幸福的。 17、海边的日落就是这么优雅,这么精彩!湛蓝的大海,像一面镜子,照着太阳。 18、夕阳无语燕归愁,离人泪眼心上秋。断肠送君从此去,一生憔悴独倚楼。 19、傍晚,渐渐西斜的太阳慢慢收敛那刺眼的光芒,带着满天柔和的光晕接进远处的山。 20、夕阳,一抹红霞。遥望天边,朦朦胧胧的可以看见一丝存留的白云。夕阳,我的梦。

    2022年1月2日
    93
  • 代码是如何控制硬件的(代码控制硬件原理)

    “先说代码: 我们是用电脑的键盘来输入的指令,每一个指令都对应一个ASCII码,而这里的ASCII码就是有序的电压的高低(或电流的有无,下面只提 电压的高低),即我们输入的是电压的高低,你所看到代码是这些电压的高低控制显示器所显示的图像,其实电脑也不知道它是什么,只知 道这样显示。 结论:代码其实就是存储在存储器(内存、硬盘或者闪存等等)中有序的电压的高低。”

    2022年5月11日
    16
  • 为什么很多创业者创业到最后负债累累,没有朋友?

    职场中苦吃多了,就想创业,可是创业要比职场复杂一万倍! 如果只是在职场打工,那么我们最多也就是隐形贫困人口而已,日子虽然过得紧一点,但是相当稳定;如果我们选择了创业,那简直就是选择了一条炼狱之路,如果没有极强的个人素质与好的运气,我们真的很难脱离苦海。 有些不幸的人因为创业过程中不懂及时止损,到最后欠下巨债,严重的会导致没有朋友,妻离子散。     本来创业的初心是想要生活过得更好一点,可是为什么会走向我们最不愿意看到的方向了呢? 因为创业者在创业的过程中一定是做了一个或者是一系列错误的决策,最终成了“孤家寡人”。 近几年来,经过跟上百位创业者的沟通和深入了解,我总结出了一个人创业成功的四个要素,分别是产品、商业模式、团队、融资路径。 只要创业者能在这四个点位上做好,成功就会离你不远!   1 产品为何重要?   我所说的产品主要有两个含义,分别是选品和质量。 先来看选品,产品的品类不同就决定了我们切入的赛道不同,赛道不同竞争大小也不同。如果我们一不小心选择了一个竞争大利润低复购周期长的行业,那么我们是很难有大机会的。 比如说蜂蜜行业,如果我们只是为了卖蜂蜜,那么我们的选品就会有问题。因为蜂蜜需要你养蜜蜂,而且网上竞争极度激烈,价格战打得异常激烈。此外,蜂蜜虽然是食品,但是它的消耗速度很慢,很多家庭可能半年也能吃完一罐蜂蜜。     完全符合了利润低、竞争激烈且复购周期长的特点,这完全就是要命的一个行业。 然而你把蜂蜜作为辅料、玻尿酸作为主要卖点,当成饮品来卖,这可能就是一个好产品了。因为它的竞争相对较小,利润高,复购周期短,是一个比较好的选品。不过目前还没有这样一款产品,只是举个例子而已。 你的选品在很大程度上就决定了创业的成败。 有了好的细分领域的产品之后,产品的质量也要跟上,如果我们只是为了营销不顾质量,那么企业早晚会为此付出沉重的代价。看一看90年代的爆火的保健品产品就知道了,几乎全部都死掉了。   2 无模式不创业   当你有了高质量的产品之后不一定可以销售顺利,一定要有好的商业模式。 要么走新零售、要么走盲盒路线、要么建渠道等,总要有一套高效的商业模式帮助项目快速推进才行。 假设市场上是什么模式,我们就也采取什么模式,那么我们只能跟着市场龙头喝点汤。一旦市场环境不好,首先饿死的就是没有模式的公司。 如果我们是一个有野心的创业者,想要成为市场的龙头,那么我…

    2021年8月20日
    40
  • 什么是SEO优化?网站SEO关键词排名有什么作用?

    快速迭代,不断试错,逐步走向成功的彼岸。这是互联网时代的王道。 不管你现在做什么或有什么想法,你必须要迎接互联网,然后适应互联网,除此之外你别无选择。 什么是SEO呢? SEO就是搜索引擎“关键词”排名优化! seo优化有什么作用呢? 为了提升网页关键词在搜索引擎在自然搜索结果中的排序~这个是非商业推广结果! 什么是非商业推广结果呢? 举个例子:随便搜索一个词比如说“什么是SEO”,那么在百度的搜索展示出来的页面如下: 图中出现的带有“广告”标签是属于付费推广图中出现的带有“百度快照”标签是属于SEO关键词排名 从上图可以发现所搜索出来的页面会展示带有“广告”两个字的搜索信息,在这个位置就是百度竞价广告就是付费才可以达到一个效果!(搜索展示页面前面付费推广广告位一般在五个或者五个以下) 那我们SEO优化做的是什么呢? SEO优化主要就是做付费广告位下面的十个关键词排名位置,这十个位置是可以我们通过SEO来优化将页面排上去! seo优化有什么作用?做SEO的目标是什么? SEO优化的作用简单来说就是为了获取搜索流量!举个例子: 比如说你开了一家公司或者在一家公司任职,主要业务是做SEO外包服务,做了个SEO业务网站,这时候你想通过这个网站获取客户咨询,那么就可以通过SEO优化来将对应的关键词优化上去,例如“SEO外包”这个关键词!如果你利用SEO技术将SEO外包这个关键词优化上去首页,那么用户搜索这个关键词的时候点击进去你的网站就有可能给你带来业务“一个点击就带来一个流量”(当然SEO只能带来流量,能不能让用户留下他的信息,还要看你网站所展示的公司实力和用户体验UI设计) 当然关于SEO的业务关键词肯定不止“SEO外包”这一个关键词,还有:“SEO外包公司,SEO排名优化服务公司,SEO外包公司哪家好”等等,当一直持续不断的去优化每个关键词,那么网站词库越来越多的时候你就会流量越来越多。 另外一个作用就是品牌曝光及提升信任度?当用户搜索“涂料加盟”这个词的时候发现我这个网站始终排名比较好始终在前三这个位置,那他就会对我这个品牌的网站有很多的认知度,对我这个品牌有更好的信任度,这就是SEO的另外一个作用就是品牌曝光及提升信任度! 今天就介绍到这里了,最后的话再提醒各位SEO的效果是跟你们的SEO执行力有关,执行力到位那么SEO的效果就会很理想,如果执行力不到位的话那么S…

    2021年6月15日
    15
  • 宽带网速慢路由器信号差怎么办?

    大家使用wifi时几乎都遇到过网速慢卡,信号差等问题,有个别路由器穿墙能力太差,隔一堵墙都没有信号了。大家不要一味的去相信运营商的话去提升宽带的网速,其实是你没有设置好,用手机简单设置一下,网速可以提升数倍。   首先打开手机的设置,找到无线网络,选择自己家的wifi点进去,找到网关,长按复制网关的一串数字,然后打开浏览器粘贴复制的数字,点击搜索,输入管理员密码就进到管理员页面     在管理员页面找到应用管理,里面有信号调节我们点进去,如果是老版本可以看到节能、常规和穿墙,我们选择穿墙模式。新版本会显示节能、常规和增强,我们选择增强模式       如果家里使用的是TP-link的路由器,我们还可以下载TP-link的app把频段设置一下,这样网速会更快   首先打开TP-link的app,选择自己的路由器,同样需要输入管理员密码,进入之后在底下找到路由设置打开。然后点击无线设置,在无线设置里面有个高级设置我们打开它,打开之后可以在里面设置2.4g和5g wifi的频段带宽,我们把频段都选择更高的40mhz或80mhz,这样就设置好了     如果大家还有更好的方法提升网速可以在下面留言

    2021年8月27日
    28
  • 运营活动怎么做?

    扣活动目的和目标用户,找到可以诉说的共同话题,通过富有创意的活动形式展示出来,在占领用户心智的同时引导用户裂变传播,形成轰动效应,做好事后总结,为后续提供更好的经验。

    2021年5月15日
    31