我使用InfluxDB对股票市场数据的时间序列进行测试,其中包括高,低,开盘价和收盘价。我的目标是聚合数据,以便每天分为N个批次(蜡烛),N是一个整数,如果某个分钟被无法填充的批次忽略,则没有问题。
例如:
交易日从上午9点到下午5点(或480分钟)显示每分钟的市场数据。如果我想每天用13支蜡烛汇总这些数据点,我每支持13支蜡烛,每支36分钟,最后12分钟将被忽略。
由于我找不到一个简单的方法来提取日期组件,如一年中的一个月,一天一分钟等等,我创建了一个预处理的度量,表示自市场开放以来每分钟的偏移量,因此每个数据点看起来像:
date symbol open high low close offset
2017-01-01 09:00:00 XPTO 1.0 1.3 0.9 1.1 0
2017-01-01 09:01:00 XPTO 1.0 1.3 0.9 1.1 1
2017-01-01 09:02:00 XPTO 1.0 1.3 0.9 1.1 2
...
在流行的关系数据库中,通过查询(下面的伪SQL)在这些桶中聚合是微不足道的:
SELECT ...,FLOOR(offset / FLOOR(480 / n)) AS candle_id FROM prices WHERE symbol = 'XPTO' GROUP BY DAY(date), candle_id
但我无法弄清楚如何在InfluxDB中做到这一点,因为没有功能性的FLOOR功能。
对于简单的时间聚合,涌入数据显示出比PostgreSQL和MySQL好得多的结果,响应速度快十倍。因此,用它完成同样的工作将是非常好的。
奖励:实际上市场开放时间取决于学期,所以它在1月到6月的上午9点和7月到12月的上午10点开放,因此桶的大小会根据它而变化。答案 0 :(得分:0)
您有两种选择:
microchip
WHERE offset / 480 / n BETWEEN x AND y
但也许Grafana的热图插件会正确表示您的数据。