window

window

window 介绍

window(time_column, window_duration[, slide_duration[, start_time]]) - 根据指定的时间戳列将行分组到一个或多个时间窗口中。窗口的开始是包含的,但结束是排除的,例如12:05将在窗口[12:05,12:10)中,但不在[12:00,12:05)中。窗口可以支持微秒精度。不支持按月顺序的窗口。有关详细解释和示例,请参阅结构化流指南文档中的“基于事件时间的窗口操作”。

参数:

  • time_column - 用作按时间窗口化的时间戳的列或表达式。时间列必须是TimestampType类型。
  • window_duration - 一个字符串,指定窗口的宽度,表示为“间隔值”(有关更多详细信息,请参见间隔文字)。注意,持续时间是固定长度的时间,并且不会根据日历而随时间变化。
  • slide_duration - 一个字符串,指定窗口的滑动间隔,表示为“间隔值”。每个slide_duration将生成一个新窗口。必须小于或等于window_duration。同样,这个持续时间是绝对的,并且不会根据日历而变化。
  • start_time - 相对于UTC 1970-01-01 00:00:00的偏移量,用以开始窗口间隔。例如,如果要使每小时的滚动窗口从小时的15分钟开始,例如12:15-13:15,13:15-14:15...,则提供start_time为15分钟。

Examples:

> SELECT a, window.start, window.end, count(*) as cnt FROM VALUES ('A1', '2021-01-01 00:00:00'), ('A1', '2021-01-01 00:04:30'), ('A1', '2021-01-01 00:06:00'), ('A2', '2021-01-01 00:01:00') AS tab(a, b) GROUP by a, window(b, '5 minutes') ORDER BY a, start;
  A1    2021-01-01 00:00:00 2021-01-01 00:05:00 2
  A1    2021-01-01 00:05:00 2021-01-01 00:10:00 1
  A2    2021-01-01 00:00:00 2021-01-01 00:05:00 1
> SELECT a, window.start, window.end, count(*) as cnt FROM VALUES ('A1', '2021-01-01 00:00:00'), ('A1', '2021-01-01 00:04:30'), ('A1', '2021-01-01 00:06:00'), ('A2', '2021-01-01 00:01:00') AS tab(a, b) GROUP by a, window(b, '10 minutes', '5 minutes') ORDER BY a, start;
  A1    2020-12-31 23:55:00 2021-01-01 00:05:00 2
  A1    2021-01-01 00:00:00 2021-01-01 00:10:00 3
  A1    2021-01-01 00:05:00 2021-01-01 00:15:00 1
  A2    2020-12-31 23:55:00 2021-01-01 00:05:00 1
  A2    2021-01-01 00:00:00 2021-01-01 00:10:00 1

Since: 2.0.0