如何使用TimescaleDB修复时间序列?

时间:2018-12-02 17:40:13

标签: postgresql timescaledb

我有这样的数据:

Month_event | No_people | Cost
2017-03-01  | 78        | 120000 
2017-01-01  | 67        | 220000 
2017-07-01  | 121       | 320000 
2017-04-01  | 70        | 100000 

我通常用我的代码执行的操作是在Postgresql中使用SQL查询(带窗口)在时间序列中添加缺失的值(复制前一个月的值):

Month_event | No_people | Cost
2017-01-01  | 67        | 220000 
2017-02-01  | 67        | 220000 
2017-03-01  | 78        | 120000 
2017-04-01  | 70        | 100000 
2017-05-01  | 70        | 100000  
2017-06-01  | 70        | 100000 
2017-07-01  | 121       | 320000 

这是我通常的查询:

WITH 
calendar AS (
    SELECT interval_date::date FROM generate_series('2005-01-01'::date, (select release_month from mtd), '1 month'::interval) interval_date
),
m AS (
    SELECT *, LEAD(monthly_event) OVER (ORDER BY monthly_event) AS next_date
    FROM my_data
)
SELECT *
FROM calendar c
JOIN m
    ON c.interval_date BETWEEN m.monthly_date AND
    (CASE WHEN m.next_date IS NULL THEN date_trunc('month', current_date) ELSE m.next_date - '1 month'::interval END);

作为Postgres扩展,我可以在我想的TimescaleDB上重用相同的查询。 我想知道TimescaleDB是否有更好的性能解决方案,因为我无法从文档中找出答案。

1 个答案:

答案 0 :(得分:2)

TimescaleDB 1.2中有一些新功能,请参见:https://blog.timescale.com/sql-functions-for-time-series-analysis/填充空白的内容应该可以更轻松地完成您要查找的内容。