如何使用SQL进行特定频率的数据采样

问题描述 投票:0回答:1

我有一个表,其中包含一些带有 Unix 时间戳的值。

数据的频率是可变的,但通常在每分钟一个数据点左右。 我想在不聚合的情况下使用自定义频率设置对数据进行采样。例如,我想每 15 分钟最多获取一个数据点。

这是一个例子:

row dt              dt_parsed           value
1   1684449236166   2023-05-18 22:33    241.0
2   1684449854529   2023-05-18 22:44    240.0
3   1684450070779   2023-05-18 22:47    240.0
4   1684450684766   2023-05-18 22:58    241.0
5   1684450868360   2023-05-18 23:01    241.0
6   1684451027112   2023-05-18 23:03    241.0
7   1684452361787   2023-05-18 23:26    241.0

以15分钟为频率,我想得到的:

row dt              dt_parsed           value
1   1684449236166   2023-05-18 22:33    241.0 --> nearest point to 22:30
2   1684449854529   2023-05-18 22:44    240.0 --> nearest point to 22:45
5   1684450868360   2023-05-18 23:01    241.0 --> nearest point to 23:00
6   1684451027112   2023-05-18 23:03    241.0 --> nearest point to 23:15
7   1684452361787   2023-05-18 23:26    241.0 --> nearest point to 23:30 

我正在使用 Impala/Hive 查询数据。

sql hive impala
1个回答
0
投票

您可以使用

floor()
函数将 Unix 时间戳四舍五入到最接近的所需时间间隔:

SELECT
  row,
  dt,
  dt_parsed,
  value
FROM
  your_table
WHERE
  dt IN (
    SELECT
      dt
    FROM (
      SELECT
        dt,
        ROW_NUMBER() OVER (PARTITION BY floor(dt / (15 * 60 * 1000)) ORDER BY dt) AS row_number
      FROM
        your_table
    ) subquery
    WHERE
      row_number = 1
  )
ORDER BY
  dt;
© www.soinside.com 2019 - 2024. All rights reserved.