Cassandra使用unixtimestamp()中的时间范围检索数据



我是Cassandra的新手,在Cassandra中创建了一个表,如下所示:

CREATE TABLE HAS.HASDDDB (
    Current float,
    Time timestamp,
    PRIMARY KEY (Current, Time)
);

应用程序按如下方式向表插入数据:

INSERT INTO HAS.HASDDDB ( Current, Time )
VALUES ( 0.01, Dateof ( NOW ( ) ) );

我需要对过去一小时的所有电流值求和。在MYSQL中,我可以这样做:

select sum(Current) from DDDB where UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(Time)<=3600

我知道cassandra不支持SUM这样的聚合函数。是否有可能达到同样的效果使用计数器,因为我在一些帖子读?如果不是,我怎么在卡桑德拉做这个?

我也有困难检索基于一个时间范围的数据,例如返回所有记录从最后一个小时或一天到现在。在Cassandra中,我如何执行像

这样的语句?
SELECT * FROM HASDDDB
WHERE current = 0.00 and Time > unixTimestampof ( now ( ) -3600)  AND Time < unixTimestampof ( now ( ) );

这是给我一个错误,我想得到的结果,例如,直到现在,从最后一个小时,就像在MYSQL。

我试过这个帖子,但它没有帮助。

不幸的是,像sum和average这样的基本函数还没有内置到Cassandra中,但是在Cassandra 2.2及以后的版本中有一个新特性,就是能够定义像sum这样的聚合函数。因此,只需一点点努力,您就可以创建自己的和函数,它将在协调器节点上运行。这里有一些创建聚合函数的例子。

如果您想按小时对数据求和,那么将"hour"作为分区键会更容易,然后您可以对分区中的所有内容求和,而无需进行范围查询。

使用"current"作为分区键没有多大意义,因为分区中的所有行都具有相同的当前值,然后您不妨获取count(*)并将其乘以当前值以获得总和。

按时间戳查询,通常使用如下格式:

ts >= '2015-08-01 18:00:00' and ts < '2015-08-01 19:00:00

最新更新