【问题标题】:How do I upsample time series in tsdb如何在 tsdb 中对时间序列进行上采样
【发布时间】:2017-11-18 11:26:45
【问题描述】:

我想对 OpenTSDB 中的时间序列进行上采样。例如,假设我每隔 8 小时记录一次温度,例如每天凌晨 1 点、上午 9 点和下午 5 点。我想通过 TSDB 查询检索这些数据的上采样,以便我在凌晨 1 点、凌晨 2 点、凌晨 3 点、......、下午 5 点、下午 6 点、......午夜获得温度我希望填写“缺失”数据通过线性插值,例如,

otemp(2am) = itemp(1am) + 1/8 * ( itemp(9am) - itemp(1am) )

其中 otemp 是输出上采样结果, itemp 是输入时间序列。

问题在于 OpenTSDB 似乎只愿意在诸如“sum”之类的多时间序列运算的上下文中线性插值数据。现在,我可以解决我想要创建另一个时间序列“ctemp”(“c”代表“时钟”)的解决方案,它每 1 小时记录一次温度为 0,然后让 TSDB 给我这个总和与 itemp 的时间序列。

我是否误解了 OpenTSDB,有没有一种方法可以做到这一点而不必创建虚假的“ctemp”系列?一些合理的东西,例如:

...?start=some_time&end=some_time&interval=1h&m=lerp:item

? -- 标记

【问题讨论】:

    标签: time-series interpolation opentsdb


    【解决方案1】:

    为了与在 HBase 上运行的 Axibase TSD 进行比较,可以使用 WITH INTERPOLATE 子句执行插值。

    SELECT date_format(time, 'MMM-dd HH:mm') AS sample_time, 
      value 
    FROM temperature 
      WHERE entity = 'sensor'
        AND datetime BETWEEN '2017-05-14T00:00:00Z' AND '2017-05-17T00:00:00Z'
      WITH INTERPOLATE(1 HOUR)
    

    示例命令:

    series e:sensor d:2017-05-14T01:00:00Z m:temperature=25
    series e:sensor d:2017-05-14T09:00:00Z m:temperature=30
    series e:sensor d:2017-05-14T17:00:00Z m:temperature=29
    series e:sensor d:2017-05-15T01:00:00Z m:temperature=28
    series e:sensor d:2017-05-15T09:00:00Z m:temperature=35
    series e:sensor d:2017-05-15T17:00:00Z m:temperature=31
    series e:sensor d:2017-05-16T01:00:00Z m:temperature=22
    series e:sensor d:2017-05-16T09:00:00Z m:temperature=40
    series e:sensor d:2017-05-16T17:00:00Z m:temperature=33
    

    The result:

    sample_time     value
    May-14 01:00    25.0000
    May-14 02:00    25.6250
    May-14 03:00    26.2500
    May-14 04:00    26.8750
    May-14 05:00    27.5000
    ...
    

    免责声明:我为 Axibase 工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 2019-01-26
      • 1970-01-01
      • 2019-10-22
      • 2021-07-23
      • 2021-10-01
      • 1970-01-01
      相关资源
      最近更新 更多