我是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做到这一点?
我也无法根据时间范围检索数据,例如返回从过去一小时或一天到现在的所有记录。在Cassandra中,我如何执行类似
的语句SELECT * FROM HASDDDB
WHERE current = 0.00 and Time > unixTimestampof ( now ( ) -3600) AND Time < unixTimestampof ( now ( ) );
这给了我一个错误。我想从最后一小时得到结果,就像在MYSQL中一样。
我试过这个post,但没有用。
答案 0 :(得分:0)
不幸的是,总和和平均等基本函数还没有构建到Cassandra中,但Cassandra 2.2及更高版本中的一个新功能是能够定义像sum这样的聚合函数。因此,只需稍加努力,您就可以创建自己的sum函数,该函数将在协调器节点上运行。请参阅创建聚合函数here的一些示例。
如果要按小时对数据求和,将“小时”作为分区键更容易,然后在不需要范围查询的情况下对分区中的所有内容求和。
使用“current”作为分区键没有多大意义,因为分区中的所有行都具有相同的当前值,然后您可能只需获取count(*)并将其乘以当前值得到总和。
要按时间戳查询,您通常会使用以下格式:
ts >= '2015-08-01 18:00:00' and ts < '2015-08-01 19:00:00