Hive SQL 开窗函数判断最近24小时数据一致性
假设需要判断的数据存在于表 A 中,包含字段 id、data 和 time,其中 time 为时间戳类型。
可以使用如下 Hive SQL 语句进行开窗函数操作,并判断最近 24 小时内数据是否一致:
SELECT id, data, time,
CASE
WHEN COUNT(DISTINCT data) OVER (PARTITION BY id ORDER BY time RANGE BETWEEN 86400 PRECEDING AND CURRENT ROW) = 1
THEN '一致'
ELSE '不一致'
END AS status
FROM A
ORDER BY id, time;
解释:
- 使用 COUNT(DISTINCT data) 函数进行计数,DISTINCT 关键字表示去重;
- 使用 OVER 关键字进行开窗函数操作,PARTITION BY id 表示按照 id 分组,ORDER BY time 表示按照时间排序,RANGE BETWEEN 86400 PRECEDING AND CURRENT ROW 表示计算窗口为当前行往前 24 小时之内的所有行;
- 判断计数结果是否为 1,如果为 1,则表示最近 24 小时内数据一致,否则为不一致;
- 最后按照 id 和 time 进行排序输出。
注意:86400 表示一天的秒数,如果要判断最近 12 小时或 48 小时内数据是否一致,需要相应地修改窗口大小。
原文地址: https://www.cveoy.top/t/topic/m1qU 著作权归作者所有。请勿转载和采集!