【问题标题】:Howto limit timescaleDB queries to the used bucket size?如何将 timescaleDB 查询限制为使用的存储桶大小?
【发布时间】:2021-10-30 04:47:33
【问题描述】:

我有一个包含时间序列数据的 postgres timescaleDB 数据库。 表流中的数据大约每 500ms 采样一次。

我需要每 1 秒获取一次数据。 我试着用 time_bucket() 函数来做。

这是我的测试查询:

    SELECT time_bucket('1 second', time) AS bucket, value AS val 
    FROM flows fl 
    WHERE
        fl.time > '2021-08-31 06:14:00+00' AND 
        fl.time <= '2021-08-31 06:18:00+00' AND 
        fl.sensor_id = 2 
    ORDER BY fl.time ASC;

返回的数据如下:

|bucket                  |val                  |
| ---------------------- | ------------------- |
| 2021-08-31 06:14:00+00 | 9.75071040883207    |
| 2021-08-31 06:14:00+00 | 10.008532745208633  |
| 2021-08-31 06:14:01+00 | 9.953632354528265   |
| 2021-08-31 06:14:01+00 | 9.833033340905137   |
| 2021-08-31 06:14:02+00 | 9.77205680132453    |
| 2021-08-31 06:14:02+00 | 10.197350449765523  |
| ...                    | ...                 |

如您所见,一秒钟的每个桶有两行。值来自每 500 毫秒收集一次的样本。

如何确保每个存储桶只有一个值? (在我的例子中:每秒一个值)

我还尝试了对值的聚合函数 (avg),但这并没有改变结果。

【问题讨论】:

    标签: sql postgresql timescaledb


    【解决方案1】:

    对于 time_bucket 函数,为了使分桶正常工作,您必须以某种方式聚合 value 列,并按语句提供分组。例如,这样的事情应该正确地存储时间,

        SELECT time_bucket('1 second', time) AS bucket, 
        sum(value) AS val 
        FROM flows fl 
        WHERE
            time_bucket('1 second', time) > '2021-08-31 06:14:00+00' AND 
            time_bucket('1 second', time) <= '2021-08-31 06:18:00+00' AND 
            fl.sensor_id = 2 
        GROUP BY bucket, sensor_id
        ORDER BY bucket ASC;
    

    希望这对你有用!

    披露:我是 Timescale 团队的一员 ?

    【讨论】:

    • 感谢您的回复,米兰达。不幸的是,我得到:“错误:列“fl.time”必须出现在 GROUP BY 子句中或用于聚合函数第 9 行:ORDER BY fl.time ASC;”所以对于 GROUP BY 子句来说,'bucket' 似乎是不够的。
    • 啊,对,您可能还想用分桶时间表示您的 where 子句参数,而不是原始时间列。
    • 我用 where 子句(和 order by)中的 bucket 语句更新了我的示例
    • 如果这对你不起作用,请告诉我!
    • 太棒了!乐意效劳! ?
    猜你喜欢
    • 1970-01-01
    • 2018-02-24
    • 2013-03-15
    • 2016-10-28
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2011-01-06
    相关资源
    最近更新 更多