跳到主要内容

window_time:提取窗口时间值

速查结论

window_time(window_column) 是 Spark SQL 中用于**从时间/会话窗口列中提取事件时间值(window.end - 1)**的函数。

语法

window_time(window_column)

参数说明

参数类型说明
window_columnColumn表示时间/会话窗口的列。通常由 window() 函数生成。

提取的时间是 window.end - 1,这反映了聚合窗口具有排他性的上限的事实 —— [start, end)

Examples

> SELECT a, window.start as start, window.end as end, window_time(window), cnt FROM (SELECT a, window, 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, window.start);
A1 2021-01-01 00:00:00 2021-01-01 00:05:00 2021-01-01 00:04:59.999999 2
A1 2021-01-01 00:05:00 2021-01-01 00:10:00 2021-01-01 00:09:59.999999 1
A2 2021-01-01 00:00:00 2021-01-01 00:05:00 2021-01-01 00:04:59.999999 1

常见报错与避坑指南

  • 输入列类型错误window_time 要求参数是由 window()session_window() 函数生成的窗口列。传入普通的时间戳列会报错或产生意外结果。
  • 时间精度的取舍:由于 window.end 是排他上界,window_time 返回的是 window.end - 1 微秒。如需严格的事件时间,应注意这 1 微秒的偏差。
  • 适用场景:该函数主要用于结构化流(Structured Streaming)中窗口聚合后的事件时间处理,例如基于窗口时间进行 JOIN 或进一步聚合。

Since: 3.4.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看