Flink SQL - OVER windows‘ ordering in stream mode must be defined on a time attribute.

本文介绍了在Flink SQL中使用窗口函数和OVER子句进行数据处理的问题。通过示例代码展示了如何创建带有水印的时间窗口表,并执行复杂的窗口聚合查询,包括最大值和最小值的计算。同时提供了Flink官方文档链接作为参考,帮助理解窗口和OVER子句的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OVER windows' ordering in stream mode must be defined on a time attribute.

看着网上flink sql的帖子较少,刚才这个问题查了好久,现在贴下完整源码。

这个报错,是建表的时候需要指定时间语义的字段,WATERMARK 是必须的

package com.z.demo

import org.apache.flink.table.api._

/**
 * @Author wenz.ma
 * @Date 2021/10/27 15:17
 * @Desc
 */
object SqlOverRows02 {
  def main(args: Array[String]): Unit = {
    val settings = EnvironmentSettings.newInstance().inStreamingMode().build()
    val tEnv = TableEnvironment.create(settings)

    tEnv.executeSql(
      """
        |create table projects(
        |id int,
        |name string,
        |score double,
        |load_date timestamp(3),
        |WATERMARK FOR load_date AS load_date - INTERVAL '1' MINUTE
        |)with(
        |'connector' = 'kafka',
        |'topic' = 'test-topic',
        |'properties.bootstrap.servers' = 'server120:9092',
        |'properties.group.id' = 'testGroup',
        |'scan.startup.mode' = 'latest-offset',
        |'format' = 'csv'
        |)
        |""".stripMargin)
    tEnv.executeSql(
      """
        |select
        | name,
        | max(score)
        |   over(partition by name
        |     order by load_date
        |     RANGE BETWEEN INTERVAL '10' SECOND PRECEDING AND CURRENT ROW )max_score,
        | min(score)
        |   over(partition by name
        |     order by load_date
        |     RANGE BETWEEN INTERVAL '10' SECOND PRECEDING AND CURRENT ROW )min_score,
        | current_time
        | from
        | projects
        |""".stripMargin).print()
  }
}


官网部分建表语句(在最下边):https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/sql/queries/window-agg/
官网over语法:https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/sql/queries/over-agg/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值