Spark / Cassandra的时间序列 - 如何在值满足条件时找到时间戳?

问题描述 投票:0回答:1

我有时间序列存储在Cassandra表中,来自几个传感器。这是我用于存储数据的模式:

CREATE TABLE data_sensors (
    sensor_id int,
    time timestamp,
    value float,
    PRIMARY KEY ((sensor_id), time)
);

例如,值可以是温度或压力,取决于它所来自的传感器。

我的目标是能够找到压力的基本统计数据(min,max,avg,std),但仅限于温度高于某个值时。这是我想要的整个过程的模式。 schema of the process described before

我认为如果我改变Cassandra模型(至少对于温度数据)能够过滤价值可能会更好。将数据导入Spark RDD之后是否有另一种方法可以避免改变Cassandra表?

然后,一旦完成温度过滤,如何获得我必须用来过滤压力数据的时间戳序列?请注意,我没有必要的温度和压力时间戳,这就是为什么我认为我需要有一段时间而不是精确时间戳列表。

谢谢你的帮助!

apache-spark cassandra time-series
1个回答
0
投票

这不是Cassandra特定的答案,但也许你想看一下时间序列数据库,这些数据库在NoSQL商店之上提供SQL层,支持JOIN和聚合。

这是一个支持周期聚合和连接的ATSD SQL语法示例。

SELECT t1.entity, t1.datetime, min(t1.value), max(t1.value), avg(t2.value)
  FROM mpstat.cpu_busy t1
  JOIN meminfo.memfree t2 
 WHERE t1.datetime >= '2016-09-20T15:00:00Z' AND t1.datetime < '2016-09-20T15:15:00Z'
  GROUP BY entity, t1.PERIOD(1 MINUTE)
  HAVING max(t1.value) > 30

该查询加入两个指标,过滤掉第一个指标低于阈值的1分钟行,然后返回第二个系列的一堆统计数据。

如果两个系列的间距不均匀,则可以使用linear interpolation对阵列进行规范化。

披露:我为开发ATSD的Axibase工作。

© www.soinside.com 2019 - 2024. All rights reserved.