Hive SQL 窗口函数:判断最近 24 小时数据一致性
假设有一个表名为my_table,其中包含字段id、value、timestamp,表示某个 ID 对应的数值和时间戳。可以使用窗口函数和子查询来判断最近 24 小时内数据是否一致,具体如下:
SELECT
id,
value,
timestamp,
CASE
WHEN value = latest_value_over_24h THEN '一致'
ELSE '不一致'
END AS consistency_within_24h
FROM (
SELECT
id,
value,
timestamp,
LAST_VALUE(value) OVER (
PARTITION BY id
ORDER BY timestamp
RANGE BETWEEN INTERVAL '24' HOUR PRECEDING AND CURRENT ROW
) AS latest_value_over_24h
FROM my_table
) sub
解释一下以上 SQL 语句的逻辑:
-
子查询
sub按照 ID 分组,并按照时间戳升序排列,然后使用LAST_VALUE()窗口函数,获取每个 ID 在最近 24 小时内的最新数值。 -
外层查询将子查询的结果与原表的每一行进行关联,比较当前行的数值和最近 24 小时内的最新数值是否相等,从而判断最近 24 小时内数据是否一致。
注意,以上 SQL 语句中的时间戳需要是 Unix 时间戳(即从 1970 年 1 月 1 日零点开始的秒数)。如果原表中的时间戳不是 Unix 时间戳,则需要进行转换。例如,如果原表中的时间戳是字符串类型的日期,可以使用 Hive 的内置日期函数unix_timestamp()将其转换为 Unix 时间戳,例如:
SELECT
id,
value,
unix_timestamp(timestamp, 'yyyy-MM-dd HH:mm:ss') AS timestamp_unix
FROM my_table
原文地址: https://www.cveoy.top/t/topic/m1qJ 著作权归作者所有。请勿转载和采集!