window_time:提取窗口时间值
速查结论
window_time(window_column) 是 Spark SQL 中用于**从时间/会话窗口列中提取事件时间值(window.end - 1)**的函数。
语法
window_time(window_column)
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| window_column | Column | 表示时间/会话窗口的列。通常由 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真题
