Hive SQL 使用窗口函数判断最近24小时数据一致性
假设有一张表叫做 'table',包含以下字段:
- id:记录的唯一标识
- data:需要比较的数据
- timestamp:记录的时间戳
可以使用以下 SQL 语句来判断最近 24 小时内数据是否一致:
SELECT id, data, timestamp,
CASE
WHEN COUNT(DISTINCT data) OVER (PARTITION BY id ORDER BY timestamp ROWS BETWEEN 23 PRECEDING AND CURRENT ROW) = 1 THEN '一致'
ELSE '不一致'
END AS result
FROM table
WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 24 HOUR)
解释一下这个 SQL 语句的每个部分:
COUNT(DISTINCT data) OVER (PARTITION BY id ORDER BY timestamp ROWS BETWEEN 23 PRECEDING AND CURRENT ROW)表示在按照 id 分组后,按照 timestamp 排序的窗口中,计算最近 24 小时内的数据的去重数量。CASE WHEN ... THEN '一致' ELSE '不一致' END表示根据上面的计算结果,判断数据是否一致。WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 24 HOUR)表示筛选最近 24 小时内的记录。
因为开窗函数的计算结果会在每一行记录中生成,所以最终的结果中每一行都会显示最近 24 小时内数据的一致性。如果需要只显示最新的一条记录,可以在语句末尾加上 ORDER BY timestamp DESC LIMIT 1。
原文地址: https://www.cveoy.top/t/topic/m1qb 著作权归作者所有。请勿转载和采集!