跳转到主内容
跳转到主内容

时间窗口函数

Experimental feature. Learn more.
Not supported in ClickHouse Cloud

时间窗口函数返回对应窗口的左闭右开区间边界。 用于 WindowView 的函数如下所示:

hop

引入版本:v21.12

跳跃时间窗口具有固定的持续时间(window_interval),并按照指定的跳跃间隔(hop_interval)移动。如果 hop_interval 小于 window_interval,则跳跃窗口会发生重叠。因此,一条记录可以被分配到多个窗口中。

由于一条记录可以被分配到多个跳跃窗口,在未与 WINDOW VIEW 一起使用 hop 函数时,函数只返回第一个窗口的边界。

语法

hop(time_attr, hop_interval, window_interval[, timezone])

参数

  • time_attr — 日期和时间。DateTime
  • hop_interval — 正的 hop 间隔。Interval
  • window_interval — 正的窗口间隔。Interval
  • timezone — 可选。时区名称。String

返回值

返回对应 hopping 窗口的左闭右开区间边界值。Tuple(DateTime, DateTime)

示例

Hopping 窗口

SELECT hop(now(), INTERVAL '1' DAY, INTERVAL '2' DAY)
('2024-07-03 00:00:00','2024-07-05 00:00:00')

hopEnd

引入版本:v22.1

返回对应 hopping window 的不包含端点的上界值(exclusive upper bound)。

由于一条记录可以被分配到多个 hop window,当 hop 函数未配合 WINDOW VIEW 使用时,该函数只返回第一个窗口的上界值。

语法

hopEnd(time_attr, hop_interval, window_interval[, timezone])

参数

  • time_attr — 日期和时间。DateTime
  • hop_interval — 正值的 hop 间隔。Interval
  • window_interval — 正值的窗口间隔。Interval
  • timezone — 可选。时区名称。String

返回值

返回对应 hopping window 的开区间上界。DateTime

示例

Hopping window 结束时间

SELECT hopEnd(now(), INTERVAL '1' DAY, INTERVAL '2' DAY)
2024-07-05 00:00:00

hopStart

引入版本:v22.1

返回对应 hop 窗口的包含式下界。

由于一条记录可以被分配到多个 hop 窗口,在未结合 WINDOW VIEW 使用 hop 函数时,该函数仅返回第一个窗口的下界。

语法

hopStart(time_attr, hop_interval, window_interval[, timezone])

参数

  • time_attr — 日期和时间。DateTime
  • hop_interval — 正的 hopping 间隔。Interval
  • window_interval — 正的窗口间隔。Interval
  • timezone — 可选。时区名称。String

返回值

返回对应 hopping 窗口(跳跃窗口)包含的下边界值。DateTime

示例

Hopping 窗口起始时间

SELECT hopStart(now(), INTERVAL '1' DAY, INTERVAL '2' DAY)
2024-07-03 00:00:00

tumble

引入于:v21.12

tumbling 时间窗口会将记录划分到持续时间固定(interval)、互不重叠且连续的窗口中。

语法

tumble(time_attr, interval[, timezone])

参数

  • time_attr — 日期和时间。DateTime
  • interval — Interval 类型的窗口间隔。Interval
  • timezone — 可选。时区名称。String

返回值

返回对应滚动窗口的左闭右开边界。Tuple(DateTime, DateTime)

示例

滚动窗口(Tumbling window)

SELECT tumble(now(), toIntervalDay('1'))
('2024-07-04 00:00:00','2024-07-05 00:00:00')

tumbleEnd

自 v22.1 起引入

返回对应 tumbling 窗口的不包含自身的上界。

语法

tumbleEnd(time_attr, interval[, timezone])

参数

  • time_attr — 日期和时间。DateTime
  • interval — Interval 类型的窗口间隔。Interval
  • timezone — 可选。时区名称。String

返回值

返回对应 tumbling 窗口不包含的上边界。DateTime

示例

Tumbling 窗口结束时间

SELECT tumbleEnd(now(), toIntervalDay('1'))
2024-07-05 00:00:00

tumbleStart

自 v22.1 引入

返回对应翻转窗口的下界(含端点)。

语法

tumbleStart(time_attr, interval[, timezone])

参数

  • time_attr — 日期和时间。DateTime
  • interval — 窗口间隔,Interval 类型。Interval
  • timezone — 可选。时区名称。String

返回值

返回对应滚动窗口(tumbling window)的包含下界。DateTime

示例

滚动窗口起始时间

SELECT tumbleStart(now(), toIntervalDay('1'))
2024-07-04 00:00:00

windowID

引入版本:v22.1

返回对应滚动窗口或跳跃窗口的窗口标识符。 该函数只能与 WINDOW VIEW 一起使用。

语法

windowID(time_attr, interval[, timezone])

参数

  • time_attr — 日期和时间。DateTime
  • interval — 窗口间隔,类型为 Interval。Interval
  • timezone — 可选。时区名称。String

返回值

返回对应时间窗口的窗口标识。UInt32

示例

窗口 ID

SELECT windowID(now(), toIntervalDay('1'))