我有一个具有以下字段的架构:
Name of row | Type
--------------------------+--------
name | string
value1 | numeric
timestamp | bigint
这些行包含具有名称,数字值和bigint值的条目,这些值以纳秒为单位存储unix时间戳。使用TimescaleDB,我想使用它time_buckets_gapfill
来检索数据。鉴于时间戳记存储在bigint中,因此非常麻烦。
我想获取以下时间间隔的汇总数据:5分钟,小时,天,周,月,季度,年。我设法使它可以使用normal来工作time_buckets
,但是现在我也想填补空白。我现在使用以下查询:
SELECT COALESCE(COUNT(*), 0), COALESCE(SUM(value1), 0), time_bucket_gapfill('5 min', date_trunc('quarter', to_timestamp(timestamp/1000000000)), to_timestamp(1599100000), to_timestamp(1599300000)) AS bucket
FROM playground
WHERE name = 'test' AND timestamp >= 1599100000000000000 AND timestamp <= 1599300000000000000
GROUP BY bucket
ORDER BY bucket ASC
这将正确返回值,但不会填充空白。如果我将查询修改为
time_bucket_gapfill('5 min',
date_trunc('quarter',
to_timestamp(timestamp/1000000000),
to_timestamp(1599100000),
to_timestamp(1599200000))
我会正确地获得第一个条目,然后每5分钟清空一行。我该如何运作?谢谢!
这是一个数据库小提琴,但是它不支持TimeScaleDB,因此无法正常工作。上面的查询返回以下内容:
coalesce | coalesce | avg_val
------------------------+-------------------------
3 | 300 | 2020-07-01 00:00:00+00
0 | 0 | 2020-09-03 02:25:00+00
0 | 0 | 2020-09-03 02:30:00+00
您应该在time_bucket_gapfill中使用与表中的数据类型匹配的数据类型。以下查询将为您提供所需的信息:
SELECT
COALESCE(count(*), 0),
COALESCE(SUM(value1), 0),
time_bucket_gapfill(300E9::BIGINT, timestamp) AS bucket
FROM
t
WHERE
name = 'example'
AND timestamp >= 1599100000000000000
AND timestamp < 1599200000000000000
GROUP BY
bucket;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句