
# 窗口
#### 功能描述
TUMBLE 窗口（滚动窗口）是 Flink 中最基础的窗口类型，它将无界数据流划分为**固定大小，不重叠**的连续时间窗口。每个数据元素只会属于一个特定的窗口。
- 无界数据流：是指一种持续不断、理论上没有终点、数据元素随时间顺序到达的数据集合。云脑中的流表是无界数据流，如："s_"开头的表。
- 数据元素：是指无界数据流中的单条独立的记录。
图1窗口示例   
![](https://support.huaweicloud.com/usermanual-secmaster/zh-cn_image_0000002427182141.png "点击放大")
#### 语法格式
```
SELECT {[window_start], [window_end], agg_function(column) | *}
FROM TABLE(
    TUMBLE(TABLE table_name, DESCRIPTOR(time_column), interval)
)
[GROUP BY window_start, window_end, columns]
```
#### 语法说明
- agg_function: 指代聚合函数，如SUM, AVG, COUNT等。
- table_name: 是一个表，用于时间划分的数据源。
- time_column: 用于划分窗口的时间属性列（必须是事件时间或处理时间）。
- interval: 窗口大小，如 INTERVAL '5' SECOND、INTERVAL '10' MINUTE等。
- window_start, window_end: 系统生成的窗口开始和结束时间。
 
#### 注意事项
- 流模型中使用开窗语句，模型冒泡告警会有延迟，具体延迟时间视窗口大小决定。
- 流表数据延迟或断流，流模型最后一个窗口结果数据会延迟到一条不满足该窗口的时间条件的数据时，则新窗口产生，旧窗口闭合后冒告警。
- 流表不能直接进行开窗，需要结合with语句创建临时视图，对临时视图进行开窗。
 
#### TUMBLE WINDOW语句示例
- 示例语句1 使用tumble窗口函数对product数据进行开窗，窗口大小设置10分钟。
  ```
  WITH a_view as (SELECT * FROM bid)
  SELECT * FROM TABLE(
  TUMBLE(TABLE a_view, DESCRIPTOR(bidtime), INTERVAL '10' MINUTES));
  ```
  
- 示例语句2 查看bid表中所有物品每10分钟的总价格。
  ```
  WITH b_view as (SELECT * FROM bid)
  SELECT window_start, window_end, SUM(price) as price
  FROM TABLE(
  TUMBLE(TABLE b_view, DESCRIPTOR(bidtime), INTERVAL '10' MINUTES))
  GROUP BY window_start, window_end
  ```
  
 
